在返回承诺后突破function – 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()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语句。 作为一个附加的问题,当使用thencatch时,使用缩进最常用的方法是什么?

一般来说,在NodeJS中,你不应该使用promise构造函数。

promise构造函数用于将不会返回promise的API转换为promise 。 你应该考虑使用一个提供promisification的库(即使你全面使用native promise),因为它提供了一个安全的替代scheme,在error handling逻辑中没有微妙的错误。

自动promisification也相当快。

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

这样做是完全安全的,承诺构造函数没有什么特别之处 – 它们只是普通的JavaScript。 Domenic 在他的博客中讨论了promise构造函数的devise。

这是非常安全的(就像任何其他function)提前返回 – 它实际上是相当普通的常规asynchronous函数。

(另外,在你的示例代码中,你应该只使用Promise.resolve ,但是我认为这很简单,只是因为它是一个例子)。