解决ES6箭头功能的承诺

时间:2017-10-08 09:43:31

标签: javascript ecmascript-6 es6-promise arrow-functions

阅读文档,因为我在ES6中理解它的含义:

foo => someFun(foo); 

相当于:

foo => { return someFun(foo); }

我正在使用箭头功能返回一个新的Promise并在该代码中调用解决方案&拒绝方法,例如

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

因此实际上是代码,

.then(data => return resolve(data))

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

.then(data => { resolve(data); })

2 个答案:

答案 0 :(得分:4)

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

此外,由于你已经将someFunThatReturnsAPromise()返回的承诺包装在一个新的承诺中,所以没有任何东西可以处理返回,因此即使返回了某些东西也不会有任何区别。

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

return someFunThatReturnsAPromise()

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

return someFunThatReturnsAPromise().then(data => data.status)

当您在then回调中返回时,它将依次返回一个新的承诺,该承诺将使用您返回的数据解析(除非您返回另一个承诺,在这种情况下,它将在该承诺解析时解析)。
通过链接异步流程及其结果,这就是promises的工作方式。

答案 1 :(得分:0)

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

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

等同于

return someFunThatReturnsAPromise()

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