Javascript 排队异步承诺

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

我正在使用Promissions查询rest api,使用的是:

这将返回一个承诺,我可以使用以下内容:

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