猿问

将承诺分配给变量并在链中返回与仅返回承诺调用不同吗?

这两条链的处理方式有什么不同还是处理方式相同?使用一个比另一个有什么好处吗?


我试过两次调用,它们都返回相同的结果 (32)——我假设它们以相同的方式处理,但我有一个朋友告诉我它们的工作方式不同。


const getNewDataPromise = num => new Promise( (resolve, reject) => {

    typeof num === 'number' ? resolve(num * 2) : 

        reject(`${num} is not a number -- input must be a numeric value.`);

});


getNewDataPromise(2).then( data => {

    const nowEight = getNewDataPromise(data);

    return nowEight;

}).then( data => {

    const nowSixteen = getNewDataPromise(data);

    return nowSixteen;

}).then( data => {

    const nowThirtyTwo = getNewDataPromise(data);

    return nowThirtyTwo

}).then( data => {

    console.log(data);

}).catch( err => {

    console.log(err);

});


getNewDataPromise(2).then( data => {

    return getNewDataPromise(data);

}).then( data => {

    return getNewDataPromise(data);

}).then( data => {

    return getNewDataPromise(data);

}).then( data => {

    console.log(data);

}).catch( err => {

    console.log(err);

});


慕哥6287543
浏览 164回答 1
1回答

烙印99

就结果而言,您的两个版本之间根本没有区别。第一个只是创建一个中间局部变量,它不会影响结果或并行性或您朋友断言的任何东西。你的第二个更简洁,同样清晰,是我在你两个之间的偏好。另一种选择是使用async/await这对异步操作序列特别有用:async function run() {&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; let data = await getNewDataPromise(2);&nbsp; &nbsp; &nbsp; &nbsp; data = await getNewDataPromise(data);&nbsp; &nbsp; &nbsp; &nbsp; data = await getNewDataPromise(data);&nbsp; &nbsp; &nbsp; &nbsp; data = await getNewDataPromise(data);&nbsp; &nbsp; &nbsp; &nbsp; console.log(data);&nbsp; &nbsp; } catch(e) {&nbsp; &nbsp; &nbsp; &nbsp; console.log(e);&nbsp; &nbsp; }}或者,如果你真的只是一遍又一遍地调用同一个函数,你也可以使用一个循环,它会减少一些重复(更 DRY):async function run() {&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; let data = 2;&nbsp; &nbsp; &nbsp; &nbsp; for (let i = 0; i < 4; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data = await getNewDataPromise(data);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; console.log(data);&nbsp; &nbsp; } catch(e) {&nbsp; &nbsp; &nbsp; &nbsp; console.log(e);&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答