【发布时间】:2015-09-13 12:13:53
【问题描述】:
我们怎样才能让异步函数停止并等待响应? 我从How do I return the response from an asynchronous call? 获得了一些关于从异步函数中获取值的解决方案但是,如果我们必须将一些值传递给函数,我仍然有更多关于如何从异步函数中获取值的问题。
在这里,我有 3 个功能。一、异步函数。
function getVal(param,callbackFunc)
{
a = function()
{
if(a.state==finished)
callbackFunc(a.response);
};
}
这个是回调函数
handler(result)
{
return result;
}
而且,这是我调用异步函数的地方,也是我遇到问题的地方
function core()
{
for(var i = 0 ; i < 10 ; i ++)
{
getVal(g[i],handler);
}
}
如您所见,我发送给 getVal 函数的参数是一个数组。那么问题来了,如何让 getVal 函数同步执行参数。
这总是给我数组的最后一个成员的结果(看起来函数跳过了从 g[0] 到 g[9] 的所有值。它总是返回 getVal(g[10],handler) 的值) .
请帮忙
谢谢。
【问题讨论】:
-
我觉得你的脚本中遗漏了一些重要的东西,以便我们理解你的问题,但我猜你正在寻找的解决方案是stackoverflow.com/a/1676422/3820185
-
好吧,如果您仔细阅读链接到的问题,您会发现您无法从异步调用返回响应。这是并发模型的固有部分。您只能返回一个承诺或接受一个回调。如果你使用 ES2016 async/await 语法,你可以接近,生成器也不错,但仅此而已。
-
如果我把异步函数分离到一个类中,调用实例而不是直接调用函数呢?
-
你在问相当于“给我找一个一直违法但又不是罪犯的人”。不等待返回值是异步的定义的一部分。
-
@JaredSmith:答案是“政治家”。
标签: javascript jquery ajax asynchronous dhtml