【问题标题】:Asynchronous chaining in JavascriptJavascript中的异步链接
【发布时间】:2014-03-31 02:43:00
【问题描述】:

我一直在尝试获得一个不那么复杂的链接解决方案,这就是我想出的: http://jsfiddle.net/mithun_daa/fEGsj/2/

它似乎有效,但是当我多次调用“myapp”时:

//call the success callback
$('#ph').text(window.myapp.doWork(true).success(onSuccess).error(onSuccess));
//call the error callback
$('#ph').text(window.myapp.doWork(false).success(onSuccess).error(onError));

回调被立即调用。我正在尝试找到一个香草 JS 解决方案。我知道 jQuery 提供了 Promise,但我只是想知道如何在纯 JS 中做到这一点。

【问题讨论】:

  • 您的异步调用未将成功/错误回调的返回值附加到 div,仅供参考。这在具有异步方法的链中根本是不可能的。
  • 是的,我解决了这个问题,但我没有将它记录到控制台。那是我之前尝试的东西的遗留物。我更新了小提琴及其链接以反映更改。
  • 啊,对不起。就小提琴中的内容而言,由于两种情况都有 2 秒的延迟,因此它们同时发生是有意义的(这就是我所看到的)。问题到底是什么? jsfiddle.net/fEGsj/4 您的代码似乎可以正常工作
  • 可能只是我对 setTimeout 的理解不够,但我假设当第二次调用时,会再暂停 2 秒。不会是这样吗?如果进行真正的 ajax 调用,这会正常工作吗?
  • 正确,事实并非如此。由于您以相同的延迟同时启动它们,因此它们将同时完成。 ajax 也是如此,请记住,ajax 请求不会总是按照它们开始的顺序完成。

标签: javascript asynccallback


【解决方案1】:

这个问题无处不在,以至于整个社区都在解决它http://www.promisejs.org 将被折叠到未来的 js 版本中。

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 2016-12-26
    • 1970-01-01
    • 2015-12-15
    • 2021-09-15
    • 2017-02-26
    • 2020-01-05
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多