在返回承诺后突破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
语句。 作为一个附加的问题,当使用then
和catch
时,使用缩进最常用的方法是什么?
一般来说,在NodeJS中,你不应该使用promise构造函数。
promise构造函数用于将不会返回promise的API转换为promise 。 你应该考虑使用一个提供promisification的库(即使你全面使用native promise),因为它提供了一个安全的替代scheme,在error handling逻辑中没有微妙的错误。
自动promisification也相当快。
这就是说,你的问题的答案是“是”。
这样做是完全安全的,承诺构造函数没有什么特别之处 – 它们只是普通的JavaScript。 Domenic 在他的博客中讨论了promise构造函数的devise。
这是非常安全的(就像任何其他function)提前返回 – 它实际上是相当普通的常规asynchronous函数。
(另外,在你的示例代码中,你应该只使用Promise.resolve
,但是我认为这很简单,只是因为它是一个例子)。