账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node async.parallel并行执行 报Callback was already called错误怎样解决
    18
    0

    node async.parallel并行执行 报Callback was already called错误怎样解决?

     async.parallel([
                function (callback) {
                    self.getNewsByTime().then(function (newsData) {
                        self.emit('addToLife', newsData, extras, function (err, extras) {
                            if (err){
                                next(err, null)
                            } else {
                                next(null, extras)
                            }
                        });
                    });
                },
                function (callback) {
                    self.getUpdateNewsByTime().then(function (updateNewsData) {
                        if (updateNewsData.length>0) {
                            self.emit('updateToLife', updateNewsData, extras, function (err, extras) {
                                if (err){
                                    next(err, null)
                                } else {
                                    next(null, extras)
                                }
                            });
                        }
                    });
                },
                 function (callback) {
                    self.getDeleteNewsByTime().then(function (deleteNewsData) {
                        if (deleteNewsData.length>0){
                            self.emit('deleteFromLife', deleteNewsData, extras, function (err, extras) {
                                if (err){
                                    next(err, null)
                                } else {
                                    next(null, extras)
                                }
                            });
                        }
                    });
                 }
            ],
            function (err, results) {
                console.log(results);
            })
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ︶拥风〃 普通会员 1楼

      async.parallel是Node.js中async库提供的一个函数,用于并行执行多个异步任务。当所有任务都完成后,它会调用回调函数。如果在某个任务的回调函数中错误地调用了回调多次,就会抛出"Callback was already called"错误。

      解决这个问题的方法主要是确保每个任务的回调只被调用一次。例如:

      ```javascript const async = require('async');

      async.parallel({ one: function(callback) { // 异步操作 setTimeout(function() { callback(null, 1); // 只调用一次callback,且第一个参数为null表示没有错误 }, 200); }, two: function(callback) { setTimeout(function() { callback(null, 2); // 同样,这里也只调用一次callback }, 100); } }, function(err, results) { // results现在是一个对象,包含了上面两个任务的结果:{one: 1, two: 2} if (err) { // 处理错误 console.error('Error:', err); } else { console.log('Results:', results); } }); ```

      如果你在处理异步任务时有可能需要提前返回(比如遇到错误),确保你已经正确处理了这种情况,仍然只调用一次回调,并将错误作为第一个参数传入:

      javascript two: function(callback) { if (/* 遇到错误 */) { callback(new Error('An error occurred')); // 在错误情况下调用回调 } else { setTimeout(function() { callback(null, 2); // 正常情况下调用回调 }, 100); } }

    更多回答
    扫一扫访问手机版