首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript ES6 Promise函数选项

Javascript ES6 Promise函数选项
EN

Stack Overflow用户
提问于 2017-08-17 15:40:30
回答 2查看 63关注 0票数 0

我有一个异步函数,它可以调用多个其他异步函数中的一个;我可以将它拆分成多个.then.catch链,但我想知道是否可以将它们合并在一起。我所拥有的是:

代码语言:javascript
复制
return new Promise((resolve, reject) => {
    if (payload.method === 'a')
        doFunctionA(arg)
        .then((x) => resolve())
        .catch((error) => reject())
    else if (payload.method === 'b')
        doFunctionB()
        .then((x) => resolve())
        .catch((error) => reject())
});

这很简单,但是有没有另一种方法来编写这个代码,以便then和catch只写一次?像这样:

代码语言:javascript
复制
return new Promise((resolve, reject) => {
    var f = (payload.method === 'a' ? doFunctionA(arg) : doFunctionB());
    f()
    .then((x) => resolve())
    .catch((error) => reject())
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-17 15:44:02

因为doFunctionAdoFunctionB已经返回Promises,所以您不必将它们包装在另一个Promise

代码语言:javascript
复制
(payload.method === 'a' ? doFunctionA : doFunctionB)(arg)
  .then((x) => resolve())
  .catch((error) => reject())
票数 0
EN

Stack Overflow用户

发布于 2017-08-17 15:44:23

是。除了两次调用f之外,您已经非常接近正确的方法了。尝试如下所示:

代码语言:javascript
复制
return new Promise((resolve, reject) => {
    (payload.method === 'a' ? doFunctionA : doFunctionB)(arg)
        .then((x) => resolve())
        .catch((error) => reject())
    ;
});

更好的方法是按照@Patrick的建议返回函数

代码语言:javascript
复制
return (payload.method === 'a' ? doFunctionA : doFunctionB)(arg);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45729236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档