javascript - for 循环中的嵌套 Promise 的行为不符合预期

标签 javascript node.js mongodb promise

我在扩展 .then() 内的 Promise 时遇到问题。我试图在 for 循环中执行数据库更新,然后在处理所有记录后关闭数据库。然而,应用程序立即退出 process.exit() 这意味着 process.exit() 甚至在所有数据库更新完成之前就已执行。我很确定我在嵌套 promise 中做错了什么。

var myDB;

function doSomething() {
   return MongoClient.connect(DB_CONNECTION).then(function(db) {
        myDB = db;
        var collection = db.collection(COLLETION_NAME);
        for (var i = 0; i < 10; i++) {

            promise.then(function{
                collection.update({
                   symbol: items[i].symbol
                }, {
                   $set: { 
                      value: 123
                   }
                }, {
                   upsert: true
               });  
            });
        }
   })
}

var promise = doSomething();
promise.then(function(){
    console.log("DONE");
    myDB.close();
    process.exit();
});

最佳答案

看起来您从 MongoClient.connect 方法中得到了一个 promise ,所以为什么不使用它来链接在一起。我根据您的代码在下面整理了一个快速示例:

function doSomething(db) {
    return new Promise(function(resolve, reject){
        var collection = db.collection(COLLETION_NAME);
        for (var i = 0; i < 10; i++) {
            collection.update({
               symbol: items[i].symbol
            }, {
               $set: { 
                  value: 123
               }
            }, {
               upsert: true
           });
        }

        resolve(db);
    })
}

function connectToDB() {
    return MongoClient.connect(DB_CONNECTION);
}

function closeDB(db) {
    return new Promise(function(resolve, reject){
         db.close();
         resolve();
    });
}

connectToDB().then(function(db){
    return doSomething(db);
}).then(function(db){
    return closeDB(db);
}).then(function(){
    console.log("DONE");
    process.exit();
}).catch(function(error){
    console.log('Something went wrong: ' + error);
});

关于javascript - for 循环中的嵌套 Promise 的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36492235/

相关文章:

javascript - Rails 渲染仅加载部分内容

javascript - 如何从异步调用返回错误

node.js - 重击 : npm: command not found?

javascript - 如何在 IE 扩展中以编程方式设置断点?

javascript - 在哪里显示$.post信息?

node.js - GraphQL - 显示列表或单个对象

performance - 索引子文档数组中的字段

java - Mongo Java 数组

angularjs - Node.js 从返回未定义的 MongoDB 获取请求

javascript - 找出文本区域中的行是否为空