gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:14:21 26 4
gpt4 key购买 nike

我在扩展 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com