我正在使用 Promise 查询一个 rest api(使用httpplease和Promise 插件):
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 解决时调用(成功/失败) "
知道怎么做吗?
米;
编辑:修正了代码中的错字