【发布时间】:2016-10-05 00:58:06
【问题描述】:
当你有这样一个基于 Promise 的函数时:
function foo() {
return new Promise(function(fulfill, reject) {
// Do some async work, and then...
console.log('a');
fulfill('b');
console.log('c');
});
}
您会注意到c 将在fulfill 语句之后打印,这意味着该函数不会因fulfill 或reject 而中断。这很麻烦,因为大多数逻辑会假设函数应该在调用fulfill() 或reject() 后结束。
问题:
然后在fulfill() 或reject() 调用之前简单地添加return 是否安全或标准用法?
function foo() {
return new Promise(function(fulfill, reject) {
// Do some async work, and then...
console.log('a');
return fulfill('b');
console.log('c'); //Does not get printed, as the function has ended execution.
});
}
// Call the function:
foo()
.then(function(response) {
console.log(response); //This is called once the function calls fulfill, will print 'b'
});
这样使用 Promise 有什么问题吗?大多数在线承诺信息都没有提及在履行或拒绝之前使用return 语句。另外一个问题是,在使用then 和catch 时,最常用的缩进方式是什么?
【问题讨论】:
-
我看不出不这样做的理由,也许不是最佳实践但安全吗?是的。
-
一般来说,是的,但你的具体例子没有意义。你不应该对同步任务使用 Promise,你应该删除
console.log('c')而不是通过在前面的行中放置return使其成为死代码。 -
@Bergi 承诺示例只是一个示例,因此是同步任务。你读过这个问题吗?
-
@love:是的,我阅读了这个问题,并以(我希望)适当的副本结束了 :-) 关于“安全”,这与承诺无关,
return只是平常回调函数中的语义。 -
@Bergi,是的,对于适当的链接。我使用了安全这个术语,因为不确定隐式返回回调可能如何影响调用者/流控制。已经回答说没有区别或不利影响,并且确实应该在想要结束函数执行时使用。感谢大家的宝贵时间。
标签: javascript node.js promise