如何在承诺中承诺承诺?

时间:2017-02-09 08:10:19

标签: javascript node.js

错误是什么?我认为这段代码必须无限输出22,23,24,25 ......等。

function find() {
  let numberPage = 22;
  getPromiseOpenPage(numberPage);

  function getPromiseOpenPage (numberPage) {
    return new Promise( function (resolve, reject) {
      resolve(numberPage);
    })
  }
  getPromiseOpenPage().then(
    function (res) {
      console.log(res);
      getPromiseOpenPage(res++);
    }
  )
}

2 个答案:

答案 0 :(得分:0)

您需要创建一个递归循环来处理所有无限承诺结果。

getPromiseOpenPage(res++);

你这里没有处理.then(不,第一个getPromiseOpenPage().then(不计算,因为它是一个不同的电话)。

所以解决方案是这样的:

handlePromise() {
  myPromise.then((res) => handlePromise()); // On Promise complete it will go back
                                            // to the handler.
}
handlePromise(); // Start handlePromise the first time.

答案 1 :(得分:0)

您不应将getPromiseOpenPage()作为initial函数

运行

test(numberPage)内,你提供了迭代的初始值,它调用的getPromiseOpenPage()将返回success状态。

console.log(res)响应值,iterate1再次调用test(res),提供1增加的新增值是23

.......一次又一次地重复同样的过程.........无限次

  const numberPage = 22;

  function getPromiseOpenPage(p) {
    return new Promise((resolve, reject) => {
      resolve(p);
    });
  }


 function test(p) {
  getPromiseOpenPage(p).then((res) => {
    console.log(res);
    res = res+1;
    test(res);
  })
}

test(numberPage);