小编jes*_*cah的帖子

F#异步Web请求,处理异常

我正在尝试在F#中使用异步工作流来获取多个Web请求.

但是,我的一些请求偶尔会返回错误(例如http 500),我不知道如何处理这个问题.看起来我的F#程序在调试器中运行时陷入无限循环.

我可能错过了一些东西,因为我看到的例子没有开箱即用.我找到的第一件事就是帮助了这段代码:

type System.Net.WebRequest with
  member req.GetResponseAsync() =
    Async.BuildPrimitive(req.BeginGetResponse, req.EndGetResponse)
Run Code Online (Sandbox Code Playgroud)

然后我有一些代码来获取请求,这是我见过的例子中非常标准的:

let async_value = async {
  let req = WebRequest.Create(url)
  let! rsp = req.GetResponseAsync()
  return (rsp :?> HttpWebResponse).StatusCode
}
Run Code Online (Sandbox Code Playgroud)

然后我试着得到结果:

let status = Async.RunSynchronously(async_value)
Run Code Online (Sandbox Code Playgroud)

但是当我在调试器中运行我的程序时,它会req.EndGetResponse因为服务器返回内部服务器错误500 而中断.如果我继续执行,它会进入一个时髦的循环,中断req.EndGetResponse(有时连续几次)和let status = Async.RunSynchronously(async_value) .

如何解决异常问题以便获取状态代码?另外,我需要上面做的类型吗?或者我错过了F#/ VS 2010 Beta 1的一些库/ dll,其中这已经是其中的一部分了?

我实际上使用Async.RunSynchronously(Async.Parallel(my_array_of_async_values))并行运行多个请求,尽管我不认为这与我遇到的异常问题有关.

事实上我遇到的例子只是使用Async.Run而不是Async.RunSynchronously可能是一个指标,我错过了一些东西...... = /

f# async-workflow

6
推荐指数
1
解决办法
2177
查看次数

无法将输入字段集中在装有ajax调用的DOM中

我疯了,试图找出如何使这项工作.代码看起来大致如下:

function onDropDownChanged() {
  $("#updatePanel").load(
    "myUrl",
    { id: $("#myDropDown option:selected").val() },
    onPanelLoaded
  );
}
function onPanelLoaded() {
  $("#theTextInput").focus();
}
$(document).ready(function() {
  $("#myDropDown").change(onDropDownChanged);
}
Run Code Online (Sandbox Code Playgroud)

第一次触发更改处理程序时,它会执行ajax更新,并且文本框会被聚焦.

但是,在后续更改中,它继续执行ajax更新,但文本框永远不会再次聚焦.

我发现,如果在onDropDownChanged,我$("#updatePanel").empty()在ajax调用之前添加,文本框将始终聚焦.问题是整个表格消失一秒钟,导致丑陋的闪光.鉴于ajax应该让这样的事情很好,这不是我想要使用的解决方法.

javascript jquery javascript-events

3
推荐指数
1
解决办法
5587
查看次数