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)
该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 就是这样设计的。
如果您只想返回数据并在发生错误时拒绝,那么您不需要 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)
除非你想对数据进行一些处理
归档时间: |
|
查看次数: |
17138 次 |
最近记录: |