2017-02-09 81 views
-3

什么是错误?我认为这个代码必须输出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++); 
    } 
) 
} 
+0

getPromiseOpenPage正好运行三次......在这三个场合的说法是'22','undefined'和'NaN' –

+0

嗨@АлександрКнязев如果有的话答案s已解决您的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – zurfyx

回答

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. 
0

test(numberPage)您提供的初始值进行迭代,你不应该运行getPromiseOpenPage()作为initial功能

在这里,它调用的的getPromiseOpenPage()这将返回一个success状态。

和你console.log(res)响应值,并通过1并再次iterate它通过提供1递增新递增的值是23

连连调用test(res) .......重复相同的处理.........无限次

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