我如何从一个异步调用返回响应?

来源:互联网 发布:微传单软件 编辑:程序博客网 时间:2024/05/21 17:38
问题:
"A"在Ajax中代表异步,它意味着发送请求(或者接收响应)都不是在正常的执行流中。比如,$.ajax立刻返回并且下一个状态,return result;,是在你获取ajax中响应,把响应结果赋值给result之前执行(即先执行return result,后执行result=response)。
这里是一个分析,希望能够帮助你更加清楚同步和异步之间的不同。


同步
发挥想像,你给你的一个朋友打电话让他帮你干某件事情,尽管它会花费一点时间,你会电话等待并且凝视天空,直到你的朋友给你你需要的答案。
当你使用一个包含“正常的”的代码的函数调用时会有同样的事情发生:
function findItem() {
    var item;
    while(item_not_found) {
        // search
    }
    return item;
}


var item = findItem();


// Do something with item
doSomethingElse();
尽管findItem可能花费很长的时间来执行,所有在findItem()之后的代码都必须等待直到这个函数返回结果。


异步:
继续想像。你因为一些原因又打电话骚扰他了,但是这次你告诉他你很忙并且他应该打你的手机。你挂掉电话,离开家并且做你之前计划好的事情。一旦你的朋友打电话给你,你立刻处理你朋友给你的信息。
当你使用Ajax请求是,同样的事情实际上也正在发生。
findItem(function(item) {
    // Do something with item
});
doSomethingElse();
不是一样在等待响应,执行会立刻继续并且在Ajax调用之后的语句被执行。为了最终能够获取响应,你提供一个函数,一旦响应被接收,这个函数就会被立刻调用,所有在那个调用之后的代码都被在回调被调用之前执行。


解决办法:


今天就翻译到这里,有时间继续:

https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call

https://stackoverflow.com/questions/562412/return-value-from-function-with-an-ajax-call
https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call
http://blog.slaks.NET/2015-01-04/async-method-patterns/
https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron
http://fwhyy.com/2009/12/in-js-method-return-multiple-values-of-the-three-methods/





阅读全文
0 0
原创粉丝点击