返回承诺后中断功能-JavaScript

用户名

当您具有基于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()or便应结束reject()

问题:
or或call之前简单地添加是安全还是标准用法returnfulfill()reject()

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'
  });

使用这样的Promises是否有任何问题?在线的大多数承诺信息return在实现或拒绝之前没有引用使用该语句。另一个附带的问题是,在使用then时最常用的缩进方式是什么catch

本杰明·格伦鲍姆(Benjamin Gruenbaum)

通常,在NodeJS中,您不应该过多使用promise构造函数。

Promise构造函数用于将不将Promise返回给Promise的API转换您应该考虑使用提供promisification的库(即使您全面使用本机promise),因为它提供了一种安全的替代方案,该方案不会在错误处理逻辑中包含细微的错误。

自动promisification也相当快。

就是说,您的问题的答案是“是”。

这样做是完全安全的,promise构造函数没有什么特别的-它们只是纯JavaScript。Domenic在他的博客中讨论了promise构造器的设计

尽早返回是非常安全的(就像其他函数一样)-实际上,这在常规异步函数中非常普遍。

(另外,在您的示例代码,你应该只使用Promise.resolve,但我相信它是不仅因为它是一个简单的例子)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章