承诺 - `then()`不能按预期工作

时间:2018-04-02 06:46:58

标签: javascript asynchronous promise

我有2个功能。我使用then() promise方法进行链接。但我试图在第一个承诺发生后启动second功能。但现在第二个函数调用为第一个。如何解决这个问题?

或我的代码有什么问题吗?

这是我的尝试:

var getData = function(){
    return new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(42); //consoles as second
    }, 5000);
  })
}

var getDataMoreData = function(){
    return new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(43); //consoles as first
    }, 3000);
  })
}



getData().then((data)=> console.log('Data', data)).then(getDataMoreData().then((data)=> console.log('data--', data )));

Live Demo

1 个答案:

答案 0 :(得分:7)

.then接受函数作为参数。当你这样做

.then(getDataMoreData()
  .then((data) => console.log('data--', data))
);

立即调用getDataMoreData()(期望它将返回一个可以放入promise链的函数)。但getDataMoreData不返回函数 - 它返回一个promise。

<{1>}中的任何函数立即调用立即执行,因为它尝试构建then承诺链。只需在.then中列出函数变量,而不是调用它:

&#13;
&#13;
then
&#13;
&#13;
&#13;