【发布时间】:2019-07-16 07:49:30
【问题描述】:
我在这里试图理解一段代码,我认为这是冗余代码,可以删除但可能我错了,这里是代码:
return(
myModule.getSomething(args.url)
.then(stream => module.uploadData({
param1: args.param1,
param2: args.param2,
param3: stream,
}))
.then(() => myBroker.dispatch({
queueUrl: myQueueUrl,
payload: JSON.stringify(args.payload),
})
)
.then(msgInfo => {}) . //This line can be removed right?
.catch(error => {
myBroker.dispatch({
queueUrl: anotherQueueUrl,
payload: JSON.stringify({ type: 'error', payload: `[ERROR] ${error}` }),
});
throw error;
})
);
我相信这条线:
.then(msgInfo => {})
可以删了吧?箭头函数什么都不做,msgInfo 是前面的 then 子句在调用 myBroker.dispatch 后返回的东西,正因为如此,我可以删除我提到的行对吗?
有人可以给我一个明确的解释吗? 为什么这条线存在?或者解释一下为什么不能删除?
PS:getSomething 和uploadData 函数返回一个promise,dispatch 函数我不太确定,因为它看起来像这样:
return(
client.sendMessage(parameters).promise()
.then(data => data)
);
它只返回一个“数据”对象,对吗?还是它也返回一个承诺,因为它最后包含 then 子句?
这种使用多个 'then' 和箭头函数的语法符号让我感到困惑,
提前非常感谢!
【问题讨论】:
-
不清楚这条线为什么存在。是的,这条线可以去掉。
-
该函数什么都不做,它返回一个空对象,最终您的顶级 return 语句将用作其返回值。澄清一下,您的顶级回报会返回一个承诺,当一切都说完后,该承诺将解析为 { }。
-
您可以使用 promise.all 来处理多个 api 调用,例如 here
-
“函数什么都不做,它返回一个空对象,”@JSager。没有。它返回未定义。花括号在这里创建一个块,而不是对象文字。所以这个函数“吞下”
msgInfo并让 promise 被解析为undefined。 -
我想如果你有一个没有括号的 arg lambda 并且声明了一个块范围,你会得到一个无效的语法错误。
标签: javascript es6-promise arrow-functions