排队异步承诺

时间:2015-03-30 17:27:33

标签: javascript asynchronous es6-promise

我使用promises查询rest api(使用httpplease使用Promise plug-in):

api.call = function (myurl) {
    return http.get({
       "url" : myurl
    });
}

这会返回一个我可以使用的承诺:

api.call (myurl)
 .then (function (resp) {
    // do whatever with the data
 });

现在我正在尝试验证api连接,为此我需要将2个异步调用排队到其余的api: 1.-要求提供身份验证令牌 2.-使用身份验证令牌进行实际呼叫:

var getToken = function () {
    var tokenUrl = "....";
    return http.get({
       "url": tokenUrl;
    })
}
api.call = function (myurl) {
    return getToken().then(function (token) {
       return http.get({
          "url" : myurl,
          "headers" : {
             "auth-token": token
          }
       })
    })
} 

客户端代码将保持不变:

api.call (myurl)
 .then (function (resp) {
    // do whatever with the data
 });

不幸的是,上面的代码在第一个代码完成之前返回最终的承诺(即,在最后的#34中令牌是undef;然后是")。

我可能遗漏了一些东西,但我认为在阅读this后这应该有效:

  

"如果你返回一个值,那么下一个"然后"用该值调用。   但是,如果你返回类似承诺的东西,那么下一个"然后"等待   在它上面,并且仅在该承诺结算(成功/失败)时被调用"

知道怎么做吗?

米;

编辑:修正了代码中的拼写错误

0 个答案:

没有答案