gpt4 book ai didi

javascript - Node 异步控制流程

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:55 26 4
gpt4 key购买 nike

我正在尝试在 Node 中处理 Twitter 数据,但遇到了一些我认为应该与 Node 样式编码相关的障碍。该代码块旨在抓取推文,检查文本是否在 mongo 中,如果不在,则将其插入。

我发现的第一个绊脚石是,在尝试将 i 打印到控制台时,它总是会在开始迭代光标之前迭代每个 i。我想如果我能澄清这一点,可能会帮助我继续前进。这些信息足以帮助我吗?

我拥有的是:

T.get('statuses/user_timeline', options , function(err, data) {

var db = MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err)
throw err;
console.log("connected to the mongoDB !");
myCollection = db.collection('test_collection2');

for (var i = 0; i < data.length ; i++) {
//let's wrap this in a loop
docu = data[i];
//console.dir(data);
console.dir(i);
var cursor = myCollection.find({text : data[i].text}).limit(1);
cursor.each(function(err, doc) {
if (doc != null) {
console.dir('doc is not null');
console.dir(doc.text);
} else {
console.dir('doc is null - inserting');
myCollection.insert(docu, function(err, records){
console.log("Record added as "+records.text);
});
}
})
}
});
})

最佳答案

问题只是因为 Javascript 是异步的。在 Mongo 中的 find 函数给出返回值之前循环就完成了。

我会做以下或类似的事情 - 只是为了解释这个概念:

T.get('statuses/user_timeline', options , function(err, data) {

var db = MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err)
throw err;
console.log("connected to the mongoDB !");
myCollection = db.collection('test_collection2');

var myfunction = function(correct_i,docu){
var cursor = myCollection.find({text : data[correct_i].text}).limit(1);
cursor.each(function(err, doc) {
if (doc != null) {
console.dir('doc is not null');
console.dir(doc.text);
} else {
console.dir('doc is null - inserting');
myCollection.insert(docu, function(err, records){
console.log("Record added as "+records.text);
});
}
})
};

for (var i = 0; i < data.length ; i++) {
//let's wrap this in a loop
docu = data[i];
//console.dir(data);
console.dir(i);
myfunction(i,docu);

}
});
})

这样,每次对 Mongo 的查找/查找都会有正确的 i。因为函数将其作为参数获取

关于javascript - Node 异步控制流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477332/

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