我可以通过使用ES7异步来“Promisify”一个函数吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (29)

所以我有一个函数应该立即返回一个被拒绝或解决的Promise,即它基本上是一个我希望“promisify”的snychronous函数。

我通常在这种情况下做的是这样的:

func() {
     // some code to check for an error
     if (hasError)
        return Promise.reject(new Error("Failure"));
     }
     return Promise.resolve("Success");
}

现在,随着ES7“异步”功能的可用性,我似乎也可以这样做:

async func() {
     // some code to check for an error
     if (hasError)
        throw new Error("Failure");
     }
     return "Success";
}

所以我基本上async只是用来“promisify”我的功能,而不用await在任何地方的功能体。正如我所看到的,这个变体应该完全一样。我是对的,还是有没有任何额外的副作用,我不知道?

提问于
用户回答回答于

无论何时声明一个异步函数AsyncFunction都会创建一个对象,该对象根据MDN将返回一个Promise:

Promise将使用异步函数返回的值解析,或者使用异步函数中抛出的未捕获的异常来拒绝。

async使用一个函数。

另外,我们来做一些测试。

async function fn(val) {
  console.log(val);
  if (val) {
    return "true";
  }
  throw new Error("false");
}

console.log(Object.getPrototypeOf(fn).constructor)

console.log(fn(true) instanceof Promise);
console.log(Object.getPrototypeOf(fn(true)).constructor)

console.log(fn(false) instanceof Promise);
console.log(Object.getPrototypeOf(fn(false)).constructor)

fn(true).then(val => console.log(val));

fn(false).catch(err => console.log("ERROR"));

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问6 回答
  • o o

    4 粉丝495 提问5 回答
  • 找虫虫

    5 粉丝0 提问5 回答
  • uncle_light

    5 粉丝518 提问4 回答

扫码关注云+社区

领取腾讯云代金券