关于node.js异步调用顺序问题
怪我咯
怪我咯 2017-04-17 13:47:25
[Node.js讨论组]

我在向mongodb插入几十条记录的过程中发现一个问题,也就是不知道什么时候插完毕,代码如下:

 var tmp1=JsonObj.RECORDS;
  collection.insertMany(tmp1, {safe: true}, function (err, result) {
                            console.log('----111111!');
                        });
                    console.log('----22222222!');
                                   

发现最先输出的是 “----22222222!”
如何控制必须先输出“-----11111111!”之后才是“------222222!”呢?因为有时候必须得这样做。
初学者诚心求助,谢谢。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(5)
PHPz

console.log('----22222222!');放到回调函数里面,console.log('----111111!');的后面。

巴扎黑

Promise....

黄舟

标准的异步问题:(提供几种解决方案)

  1. 回调

  2. 事件

  3. promise

  4. 生成器CO库

  5. Es7 的 async 异步库

高洛峰

用async流程控制

大家讲道理

不知道你用的是什么库。

刚翻了下 node-mongodb-native 的源码:https://github.com/mongodb/node-mongodb-native/blob/2.1/lib/collection.js

其中第516行:

define.classMethod('insertMany', {callback: true, promise:true});

注意这里的 promise: true。也就是说,方法insertMany是支持promise的,再往上看几行:

  // Return a Promise
  return new this.s.promiseLibrary(function(resolve, reject) {
    bulkWrite(self, operations, options, function(err, r) {
      if(err) return reject(err);
      resolve(mapInserManyResults(docs, r));
    });
  });

Return a Promise! Return a Promise! Return a Promise! 重要的事情说三遍!!!

也就是说你的代码可以写成:

var tmp1=JsonObj.RECORDS;
collection.insertMany(tmp1, {safe: true}).then(function (result) {
    // parse `result`
    console.log('----111111!');
}).then(function() {
    console.log('----22222222!');
}).catch(function(err) {
    console.log(`${err}`);
});

不好意思,代码没真实在node环境下运行过。如果你有空可以去试试,把结果或问题发出来,我这边更正下 :)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号