具有返回功能的正确回调

Sankalp

我有三个函数,我想使用适当的回调函数来调用函数,以便该值在第二次使用中返回一次。问题是我希望从回调函数返回值时,我的回调函数在main函数之后执行。

我有三个功能saveUser,savePoet,saveArtist。所有操作都应按顺序执行,因此saveUser返回savePoet,savePoet返回saveArtist。我尝试过的是。

var saveUsers = function (callback) {         
    var users = [{
            name: 'xyz',
            email: '[email protected]'

        }, {
            name: 'User New',
        }],
        savedUser = [];
    console.log('Saving Users --');
    __.map(users, function (record) {
        var recordType = new User(record);
        recordType.save(function (err, result) {
            if (err) console.log(err);
            if (!err) {
                console.log('Inserted user - ' + result.name);
                savedUser.push(result._id);
            }
        });
    });
    callback(savedUser);
};


saveUsers(function (savedUsers) {
    console.log(savedUsers);
    console.log('Saving Poets --');

    var poets = [{
        name: 'First Poet',
        userId: savedUsers[0]
    }, {
        name: 'Second Poet',
        userId: savedUsers[0]
    }, {
        name: 'Third Poet',
        userId: savedUsers[0]
    }];
    __.map(poets, function (record) {
        var recordType = new Poet(record);
        recordType.save(function (err, result) {
            if (err) console.log(err);
            if (!err) {
                console.log(result);
                console.log('Inserted poet - ' + result.name);
            }
        });
    });
});


var saveArtist = function(){
    console.log();
    console.log('Saving Artist --');

    var artists = [{
        name: 'First artist',
        userId: savedUsers[0]
    }, {
        name: 'Second artist',
        userId: savedUsers[0]
    }, {
        name: 'Third artist',
        userId: savedUsers[0]
    }];
    __.map(artists, function (record) {
        var recordType = new Artist(record);
        recordType.save(function (err, result) {
            if (err) console.log(err);
            if (!err) {
                console.log(result);
                console.log('Inserted artist - ' + result.name);
            }
        });
    });
}
Oleksandr T.

您尝试错误的方式使用同步 .map异步 .save,在这种情况下,您需要使用像asyncnpm i async)这样的

var async = require('async');

var saveUsers = function(callback) {
  var users = [{
      name: 'xyz',
      email: '[email protected]'
    }, {
      name: 'User New',
    }];

  async.mapSeries(users, function (record, next) {
    new User(record).save(function (err, result) {
      if (err) {
        return next(err);
      }

      console.log(result);
      console.log('Inserted poet - ' + result.name);
      next(result);
    });
  }, function (err, users) {
    if (err)  {
      return callback(err);
    }

    callback(users.map(function (user) {
      return user._id;
    }));
  });
};


function savePoets(users, callback) {
  var poets = [{
    name: 'First Poet',
    userId: users[0]
  }, {
    name: 'Second Poet',
    userId: users[0]
  }, {
    name: 'Third Poet',
    userId: users[0]
  }];

  async.eachSeries(poets, function (record, next) {
    new Post(record).save(function (err, result) {
      if (err) {
        return next(err);
      }

      console.log(result);
      console.log('Inserted poet - ' + result.name);
      next();
    });
  }, function (err) {
    if (err)  {
      return callback(err);
    }

    callback();
  });
}

function saveArtists(users, callback) { 
  var artists = [{
    name: 'First artist',
    userId: users[0]
  }, {
    name: 'Second artist',
    userId: users[0]
  }, {
    name: 'Third artist',
    userId: users[0]
  }];

  async.eachSeries(poets, function (record, next) {
    new Artist(record).save(function (err, result) {
      if (err) {
        return next(err);
      }

      console.log(result);
      console.log('Inserted poet - ' + result.name);
      next();
    });
  }, function (err) {
    if (err)  {
      return callback(err);
    }

    callback();
  });
}

async.waterfall([
  function (next) {
    saveUsers(next);
  }, 
  function (users, next) {
    async.parallel([
      function (next) {
        savePoets(users, next);
      },

      function (next) {
        saveArtists(users, next);
      }
    ], next);
  }
], function (err) {
  if (err) {
    return console.log(err);
  }

  console.log('Done');
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有回调功能的Javascript数组

即使具有正确的回调,此单击功能仍在执行

正确使用带有回调功能的异步/等待

具有回调功能的驱动程序

Node Twitter库具有多种回调功能

Kivy Python-具有部分回调功能

Q_oper8在子进程中具有回调功能,可将数据返回到邮件处理

从具有回调的函数中返回数据的最佳实践

带有回调的功能

有没有功能来测试在js中具有回调的对象实例?

SetTimer(具有回调功能)是否通过启动新线程来工作?

如何在Python中具有类似于Javascript回调的功能

Matplotlib动画;在推送模式下进行动画处理,而不具有回调功能

具有回调功能的AIO异步I / O-寻找最佳方法

在node.js中正确放置具有多个异步redis调用的回调

jQuery AJAX回调:识别PHP代码的返回值是否具有给定的模式

如何将函数接口与具有返回值的回调一起使用

创建元素的回调函数返回具有空innerHTML的元素

$(this)在animate()回调中但具有setTimeout

具有回调行为的jQuery .attr()

调用退出错误后,具有回调功能的节点Cron变得无法排队握手

在Wordpress中使用CMB2添加具有自定义回调功能的自定义元框?

回调虚拟功能

了解回调功能

必须具有返回类型或回调作为Android的最后一个参数Retrofit2?

回调不返回

没有回调作为参数的模拟功能

等待带有内部回调的同步功能

我对回调函数有正确的了解吗?