gpt4 book ai didi

javascript - Node ,异步编程,回调 hell

转载 作者:搜寻专家 更新时间:2023-10-31 23:05:43 26 4
gpt4 key购买 nike

我正在尝试理解回调和异步编程,但遇到了一些麻烦。

这是一些伪代码:

var lines = [];
var arrayOfFeedUrls = [url1,url2,...];

function scrape(url){
http.get(url, function(res) {
res.pipe(new FeedParser([options]))
.on('readable', function () {
var stream = this, item;
while (item=stream.read()) {
line = item.title;
lines.push(line);
}
});
});
});

for (i in arrayOfFeedUrls){
scrape(arrayOfFeedUrls[i];
}
console.log(lines.length);

它显然返回 0,因为 scrape 函数是异步执行的。我明白了,但是我尝试了很多复杂的方法,无法弄清楚如何正确地编写它。任何帮助/解释将不胜感激。我已经阅读(而且我还在阅读)很多教程和示例,但我认为获得它的唯一方法是自己编写一些代码。如果我解决了这个问题,我会发布答案。

最佳答案

你可能想查看 this article有关 Node 的介绍,可能有助于您更好地理解 Node 中的异步编程。

就异步编程而言,async是 Node 用户领域中非常流行的模块,可帮助您毫不费力地编写异步代码。例如(未经测试的伪代码):

function scrape (done) {
http.get(url, done);
}

function parse (res, done) {
var lines = [];

res.pipe(new FeedParser([options]))
.on('readable', function () {
var stream = this, item;
while (item=stream.read()) {
line = item.title;
lines.push(line);
}
})
.on('end', function () {
done(null, lines);
});
}

function done (err, lines) {
if (err) { throw err; }

console.log(lines.length);
}

async.waterfall([scrape, parse], done);

关于javascript - Node ,异步编程,回调 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19639820/

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