0

我正在使用 Promise 查询一个 rest api(使用httppleasePromise 插件):

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
 });

不幸的是,上面的代码在第一个完成之前返回了最终的承诺(即,令牌在最后的“then”中是 undef)。

我可能遗漏了一些东西,但我认为这应该在阅读后工作

“如果您返回一个值,则使用该值调用下一个“then”。但是,如果您返回类似 Promise 的内容,则下一个“then”等待它,并且仅在该 Promise 解决时调用(成功/失败) "

知道怎么做吗?

米;

编辑:修正了代码中的错字

4

0 回答 0