Javascript 排队异步承诺
我正在使用Promissions查询rest api,使用的是: 这将返回一个承诺,我可以使用以下内容:Javascript 排队异步承诺,javascript,asynchronous,es6-promise,Javascript,Asynchronous,Es6 Promise,我正在使用Promissions查询rest api,使用的是: 这将返回一个承诺,我可以使用以下内容: api.call (myurl) .then (function (resp) { // do whatever with the data }); 现在,我正在尝试验证api连接,为此,我需要对rest api的2个异步调用进行排队: 1.-请求身份验证令牌 2.-使用身份验证令牌进行实际呼叫: var getToken = function () { var tok
api.call (myurl)
.then (function (resp) {
// do whatever with the data
});
现在,我正在尝试验证api连接,为此,我需要对rest api的2个异步调用进行排队:
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
});
不幸的是,上面的代码在第一个承诺完成之前返回了最终承诺,即,最后一个承诺中的令牌是未定义的
我可能遗漏了一些东西,但我认为这应该在阅读后起作用:
如果您返回一个值,那么将使用该值调用下一个值。
但是,如果您返回类似于承诺的内容,那么下一个将等待
只有在承诺成功/失败时才会调用
你知道怎么做吗
M
编辑:修复了代码中的打字错误什么是tokenUrl?你的意思是说放弃?是的,把承诺连在一起。然后这样的电话应该会起作用。确保你从任何地方回来。是的@Bergi,tokenUrl应该是getToken。现在修复了OP.return getToken.thenfunction token应该处理http.get返回的响应对象,即return getToken.thenfunction response{…var token=response.data…}感谢所有的评论,我现在发现了问题,它位于承诺逻辑之外,是一个讨厌的bug!。至少你的评论帮助我不再看错地方了!
api.call (myurl)
.then (function (resp) {
// do whatever with the data
});