解析来自 ES6 箭头函数的 promise

con*_*nst 8 javascript ecmascript-6 es6-promise arrow-functions

阅读我在 ES6 中理解的文档的含义:

foo => someFun(foo); 
Run Code Online (Sandbox Code Playgroud)

相当于:

foo => { return someFun(foo); }
Run Code Online (Sandbox Code Playgroud)

我正在返回一个新的 Promise 并在该代码中使用箭头函数调用解析和拒绝方法,例如

return new Promise(function(resolve, reject)
{
    someFunThatReturnsAPromise()
    .then(data => resolve(data))
    .catch(err => reject(err));
});
Run Code Online (Sandbox Code Playgroud)

因此实际上是当时的代码,

.then(data => return resolve(data))
Run Code Online (Sandbox Code Playgroud)

如果是这样,解析的结果(我不确定值的类型)是否重要,我是否应该稍微简洁一些并使用 {} 编写它以防止隐式返回

.then(data => { resolve(data); })
Run Code Online (Sandbox Code Playgroud)

Len*_*olm 5

resolve函数已经返回undefined,因此如果您使用单行箭头函数隐式返回它或根本不从函数体返回它(因为后者意味着您的函数体隐式返回undefined自身),这绝对没有区别。

此外,由于您已将返回的承诺包装someFunThatReturnsAPromise()在一个新的承诺中,因此无论如何都没有处理返回的内容,因此即使确实返回了某些东西也不会有任何区别。

更重要的是,在新承诺中包装承诺的方式是一种反模式。该new Promise()构造仅用于处理尚未基于 Promise 的异步进程。
既然someFunThatReturnsAPromise()已经返回了一个承诺,你不需要把它包装成一个新的,只需使用你得到的!
对于您的示例,这仅意味着返回它:

return someFunThatReturnsAPromise()
Run Code Online (Sandbox Code Playgroud)

如果您想对数据进行一些处理,例如只返回一部分数据(status下面示例中的属性),您可以在then回调中执行此操作:

return someFunThatReturnsAPromise().then(data => data.status)
Run Code Online (Sandbox Code Playgroud)

当您在then回调中返回时,它会依次返回一个新的承诺,该承诺通过您返回的数据得到解决(除非您返回另一个承诺,在这种情况下,当该承诺解决时它将解决)。
通过链接异步进程及其结果,promise 就是这样设计的。


mar*_*308 3

如果您只想返回数据并在发生错误时拒绝,那么您不需要 then()

return new Promise(function(resolve, reject)
{
    someFunThatReturnsAPromise()
    .then(data => resolve(data))
    .catch(err => reject(err));
});
Run Code Online (Sandbox Code Playgroud)

将相当于

return someFunThatReturnsAPromise()
Run Code Online (Sandbox Code Playgroud)

除非你想对数据进行一些处理