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

问题:
"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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值