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

用JavaScript等待一些异步任务完成的最简单方法?

用JavaScript等待一些异步任务完成的最简单方法?

我想删除一些mongodb集合,但这是一个异步任务。该代码将是:var mongoose = require('mongoose');mongoose.connect('mongo://localhost/xxx');var conn = mongoose.connection;['aaa','bbb','ccc'].forEach(function(name){    conn.collection(name).drop(function(err) {        console.log('dropped');    });});console.log('all dropped');控制台显示:all droppeddroppeddroppeddropped确保all dropped删除所有收藏集后将被打印的最简单方法是什么?任何第三方都可以用来简化代码。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我看到您正在使用,mongoose因此您正在谈论服务器端JavaScript。在这种情况下,我建议您查看异步模块并使用async.parallel(...)。您会发现此模块非常有用-它是为解决您所遇到的问题而开发的。您的代码可能如下所示


var async = require('async');


var calls = [];


['aaa','bbb','ccc'].forEach(function(name){

    calls.push(function(callback) {

        conn.collection(name).drop(function(err) {

            if (err)

                return callback(err);

            console.log('dropped');

            callback(null, name);

        });

    }

)});


async.parallel(calls, function(err, result) {

    /* this code will run after all calls finished the job or

       when any of the calls passes an error */

    if (err)

        return console.log(err);

    console.log(result);

});


查看完整回答
反对 回复 2019-10-15
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

使用承诺。


var mongoose = require('mongoose');


mongoose.connect('your MongoDB connection string');

var conn = mongoose.connection;


var promises = ['aaa', 'bbb', 'ccc'].map(function(name) {

  return new Promise(function(resolve, reject) {

    var collection = conn.collection(name);

    collection.drop(function(err) {

      if (err) { return reject(err); }

      console.log('dropped ' + name);

      resolve();

    });

  });

});


Promise.all(promises)

.then(function() { console.log('all dropped)'); })

.catch(console.error);

这将丢弃每个集合,在每个集合之后打印“已删除”,然后在完成时打印“全部删除”。如果发生错误,则显示为stderr。


先前的答案(这早于Node对Promises的本地支持):

使用Q承诺或Bluebird承诺。


与Q:


var Q = require('q');

var mongoose = require('mongoose');


mongoose.connect('your MongoDB connection string');

var conn = mongoose.connection;


var promises = ['aaa','bbb','ccc'].map(function(name){

    var collection = conn.collection(name);

    return Q.ninvoke(collection, 'drop')

      .then(function() { console.log('dropped ' + name); });

});


Q.all(promises)

.then(function() { console.log('all dropped'); })

.fail(console.error);

与蓝鸟:


var Promise = require('bluebird');

var mongoose = Promise.promisifyAll(require('mongoose'));


mongoose.connect('your MongoDB connection string');

var conn = mongoose.connection;


var promises = ['aaa', 'bbb', 'ccc'].map(function(name) {

  return conn.collection(name).dropAsync().then(function() {

    console.log('dropped ' + name);

  });

});


Promise.all(promises)

.then(function() { console.log('all dropped'); })

.error(console.error);


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信