为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2021-09-30 17:13:47
这两条链的处理方式有什么不同还是处理方式相同?使用一个比另一个有什么好处吗?我试过两次调用,它们都返回相同的结果 (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);});
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

就结果而言,您的两个版本之间根本没有区别。第一个只是创建一个中间局部变量,它不会影响结果或并行性或您朋友断言的任何东西。


你的第二个更简洁,同样清晰,是我在你两个之间的偏好。


另一种选择是使用async/await这对异步操作序列特别有用:


async function run() {

    try {

        let data = await getNewDataPromise(2);

        data = await getNewDataPromise(data);

        data = await getNewDataPromise(data);

        data = await getNewDataPromise(data);

        console.log(data);

    } catch(e) {

        console.log(e);

    }

}

或者,如果你真的只是一遍又一遍地调用同一个函数,你也可以使用一个循环,它会减少一些重复(更 DRY):


async function run() {

    try {

        let data = 2;

        for (let i = 0; i < 4; i++) {

            data = await getNewDataPromise(data);

        }

        console.log(data);

    } catch(e) {

        console.log(e);

    }

}


查看完整回答
反对 回复 2021-09-30
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信