将多个参数的理解顺序传递给解析,并将值赋予.then()

问题描述 投票:0回答:1
function fn() {
  return Promise.resolve("firstValue")
}

function twoReturnValues(firstValue) {
  return firstValue, "secondValue"
}

function twoReturnValuesPromise(firstValue) {
  return Promise.resolve(firstValue, "secondValue")
}

fn().then(twoReturnValues).then(console.log) // secondValue
fn().then(twoReturnValuesPromise).then(console.log) // firstValue

鉴于上面的代码段,我很困惑为什么:

fn().then(twoReturnValues).then(console.log)

印刷品:secondValue

和:fn().then(twoReturnValuesPromise).then(console.log)

打印:firstValue

javascript es6-promise
1个回答
0
投票

因为您不能有两个返回值,只有一个,并且"a", "b"不会执行您当时认为的操作。 (如果您需要返回比单个值更复杂的数据,请返回数组或对象。)

您看到两种不同的行为。

第一:

return "a", "b"

这正在使用comma operator

逗号运算符(,)评估其每个操作数(从左到右,并返回最后一个操作数的值。

因此,表达式"a", "b"的计算结果为"b",因此您的声明与此基本相同:

return "b"

第二:

Promise.resolve("a", "b")

根据Promise.resolve documentation,它采用one参数,即用于解决承诺的值。与JavaScript通常一样,其他参数会被静默忽略,因此您的操作与此处基本相同:

Promise.resolve
© www.soinside.com 2019 - 2024. All rights reserved.