在承诺链上返回空箭头函数
Returning empty arrow function on promise chain
我试图理解这里的一段代码,我认为这是多余的代码,可以删除,但也许我错了,这是代码:
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 子句 returns 的东西,因此,我可以删除我提到的行吗?
有人可以给我一个明确的解释吗?
为什么那条线存在?或者解释一下为什么我不能删除它?
PS:函数 getSomething 和 uploadData return 是一个承诺,调度函数我不太确定,因为它看起来像这样:
return(
client.sendMessage(parameters).promise()
.then(data => data)
);
它 return 只是一个对象 'data' 对吗?或者它 return 也是一个承诺,因为它最后包含 then 子句?
这种使用多个 'then' 和箭头函数的语法符号让我很困惑,
非常感谢!
我能想到为什么该行会存在的唯一原因是,如果正在使用整个块的函数位于某个地方,那么 myBroker.dispatch
的解析值不应该(或更好) not) 暴露给更大功能的消费者。例如:
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 是否已解决(如果过程成功),而不告诉他们不必要的细节。
不过,如果 none 是一个问题,那么是的,请随时删除 .then(msgInfo => {})
行。
我试图理解这里的一段代码,我认为这是多余的代码,可以删除,但也许我错了,这是代码:
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 子句 returns 的东西,因此,我可以删除我提到的行吗?
有人可以给我一个明确的解释吗? 为什么那条线存在?或者解释一下为什么我不能删除它?
PS:函数 getSomething 和 uploadData return 是一个承诺,调度函数我不太确定,因为它看起来像这样:
return(
client.sendMessage(parameters).promise()
.then(data => data)
);
它 return 只是一个对象 'data' 对吗?或者它 return 也是一个承诺,因为它最后包含 then 子句?
这种使用多个 'then' 和箭头函数的语法符号让我很困惑,
非常感谢!
我能想到为什么该行会存在的唯一原因是,如果正在使用整个块的函数位于某个地方,那么 myBroker.dispatch
的解析值不应该(或更好) not) 暴露给更大功能的消费者。例如:
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 是否已解决(如果过程成功),而不告诉他们不必要的细节。
不过,如果 none 是一个问题,那么是的,请随时删除 .then(msgInfo => {})
行。