【问题标题】:How do you handle error in asyncjs?你如何处理 asyncjs 中的错误?
【发布时间】:2015-06-18 02:49:21
【问题描述】:

在文档中,我找不到在异步系列方法中处理错误的方法。 我怎样才能正确地学习异步 js,通常 github wiki 在实用性方面低于与它无关的人的平均水平。

这是我的代码:

function async1(cb,err) {
    setTimeout(function () {
        console.log(1);
        cb();
    }, 1000);
}

function async2(cb,err) {
    setTimeout(function () {
        // console.log(2);
        throw new Error;
        cb();
    }, 1000);
}

function async3(cb,err) {
    setTimeout(function () {
        console.log(3);
        cb();
    }, 1000);
}

async.series([
    async1,
    async2,
    async3
], function  (err) {
    console.log(err);
});

它只是终止并抛出错误。

我有几个问题...

我是否正确处理了错误,显然不正确,所以出了什么问题?

为了使异步工作,串联使用的函数是否必须具有第一个参数作为回调?

如果是,那么是否意味着您不能将它与其他库一起使用。因为他们可能没有回调作为第一个参数。

【问题讨论】:

  • 节点回调不是安全抛出的,你不能在它们内部以这种方式抛出异常(例如承诺 - 顺便说一句),你需要尝试/捕获它们并使用错误 @987654323 调用 cb @ 而不是扔掉它。见stackoverflow.com/questions/14301839/…
  • 我如何使用 asyncjs
  • 这不是 async.js 的错。该错误在 setTimeout 中。正如 Benjamin 所说,您不能从异步函数中抛出错误。而是将错误作为参数传递给您的回调。

标签: node.js asynchronous


【解决方案1】:

两件事:

第一个函数只接受 cb 参数,没有 err 参数,所以它应该真的像 function async1(cb){. 而不是 function(cb,err){. 和 ...

要抛出错误,你这样做

cb(new Error) //as told in comments above.

不要抛出新的错误。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    相关资源
    最近更新 更多