我试图在这里理解一段代码,我认为这是多余的代码,可以将其删除,但也许我错了,这是代码:
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是调用myBroker.dispatch之后的上一个then子句所返回的东西,因此,我可以删除我刚才提到的行吗?
有人可以给我一个清晰的解释吗? 为什么那条线存在?或解释为什么我不能删除它?
PS:函数getSomething和uploadData返回一个promise,我不确定调度函数,因为它看起来像这样:
return(
client.sendMessage(parameters).promise()
.then(data => data)
);
它仅返回“数据”正确的对象?还是因为它最后包含了then子句,还返回了一个Promise?
这种使用多个'then'和arrow函数的语法符号使我感到困惑,
非常感谢!
答案 0 :(得分:1)
我能想到的那条行会存在的唯一原因是,如果要使用此整个块的功能在某个地方,使得myBroker.dispatch
的解析值不应该(或者最好不要)暴露给消费者的更大功能。例如:
const thisModule = (() => {
const myBroker = ...;
function getSomethingAndDispatchBroker() {
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 => {})
.catch(error => {
myBroker.dispatch({
queueUrl: anotherQueueUrl,
payload: JSON.stringify({ type: 'error', payload: `[ERROR] ${error}` }),
});
throw error;
})
);
}
return { getSomethingAndDispatchBroker };
})();
在这里,可以从外部调用函数getSomethingAndDispatchBroker
,但是出于隐私或代码的考虑,最好将myBroker.dispatch
的解析值保留在thisModule
内部清晰-也许您只希望函数的用户知道 Promise是否已解决(如果过程成功),而不必告诉他们不必要的细节。
不过,如果这些都不是问题,那么可以,请随时删除.then(msgInfo => {})
行。