如何在JavaScript中阻止异步函数

Rya*_* Li 10 javascript asynchronous

我需要在JavaScript中编写一个函数,它从调用异步函数返回一个状态.但是,调用者只接收该值,并且不提供回调函数.我尝试过类似的东西:

function getState() {
    var ret = null;
    asyncCall("request",
        function() { ret = "foo"; } // callback
    );
    while (ret === null)
        ; // block on the asynchronous call
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

然而,循环永远不会结束......

有任何想法吗?谢谢.

小智 9

我认为你正在寻找StratifiedJS,http://stratifiedjs.org 它允许你像你写的一样"编排"你的异步代码,请注意它"写"像同步代码,它不会阻止你的应用程序的其余部分.您可以通过加载apollo js库在任何地方使用它.

这就是分层JavaScript中的样子:

function getState() {
  waitfor (var ret) {
    // block on the asynchronous call
    asyncCall("request", resume);
  }
  return ret;
}
Run Code Online (Sandbox Code Playgroud)

当然有些模块/库只会让它看起来像这样:http: //onilabs.com/modules#http

function getState() {
  return http.get("request");
}
Run Code Online (Sandbox Code Playgroud)