为了账号安全,请及时绑定邮箱和手机立即绑定

正确尝试…使用异步/等待捕获语法

正确尝试…使用异步/等待捕获语法

幕布斯7119047 2019-07-05 15:47:58
正确尝试…使用异步/等待捕获语法我喜欢新的平整度Async/Await但是,我不确定我是否喜欢这样的事实:我必须声明我的变量await在某物的外面try...catch块以便以后使用。就像这样:let createdUsertry {     createdUser = await this.User.create(userInfo)} catch (error) {     console.error(error)}console.log(createdUser)// business// logic// goes// here如果我错了,请纠正我,但这似乎是最好的做法不将多行业务逻辑放置在try所以我只能选择宣布createdUser在块之外,在块中分配它,然后在之后使用它。这种情况下的最佳实践是什么?
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

另一种更简单的方法是将.catch附加到诺言函数中。例:

const createdUser = await this.User.create(userInfo).catch( error => {// handle error})


查看完整回答
反对 回复 2019-07-05
?
皈依舞

TA贡献1851条经验 获得超3个赞

但我认为这不是最好的方法,因为您必须回到旧的那时()方法,所以我认为更好的方法是捕捉异步函数中的错误

async function someAsyncFunction(){
    const createdUser = await this.User.create(userInfo);

    console.log(createdUser)}someAsyncFunction().catch(console.log);
  • 但如果我们有很多

    await

    在相同的函数中需要捕获每一个错误?

您可以声明to()功能

function to(promise) {
    return promise.then(data => {
        return [null, data];
    })
    .catch(err => [err]);}

然后

async function someAsyncFunction(){
    let err, createdUser, anotherUser;

    [err, createdUser] = await to(this.User.create(userInfo));

    if (err) console.log(`Error is ${err}`);
    else console.log(`createdUser is ${createdUser}`);


    [err, anotherUser] = await to(this.User.create(anotherUserInfo));

    if (err) console.log(`Error is ${err}`);
    else console.log(`anotherUser is ${anotherUser}`);}someAsyncFunction();

当阅读它时:“等待此.User.create”。

最后,您可以创建模块“to.js”,或者只需使用等待-到-js模块。

您可以获得更多关于to这个职位


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 292 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号