私は以下のコードルーチンが優れています。唯一の問題は、links
配列の同じ順序で戻ってくる必要があるということです。たとえば、google.comのリンクの結果が最初に返ってきた後、yahooなどが必要です。コードは現在、「ランダム」な順序で返されています。配列の内容の順にasync.map関数を実行するにはどうすればいいですか?
var Nightmare = require('nightmare');
var async = require('async');
var links = [
"http://www.google.com",
"http://www.yahoo.com",
"http://www.bing.com",
"http://www.aol.com",
"http://duckduckgo.com",
"http://www.ask.com"
];
var scrape = function(url, callback) {
var nightmare = new Nightmare();
nightmare.goto(url);
nightmare.wait('body');
nightmare.evaluate(function() {
return document.querySelector('body').innerText;
})
.then(function (result) {
console.log(url, result);
})
nightmare.end(function() {
callback();
});
}
async.map(links, scrape);
UPDATE: おかげで@christophetd。ここに私の改訂作業のコードは次のとおりです。the official async documentationから
var Nightmare = require('nightmare');
var async = require('async');
var links = [
"http://www.google.com",
"http://www.yahoo.com",
"http://www.bing.com",
"http://www.aol.com",
"http://duckduckgo.com",
"http://www.ask.com"
];
var scrape = function(url, callback) {
var nightmare = new Nightmare();
nightmare.goto(url);
nightmare.wait('body');
nightmare.evaluate(function() {
return document.querySelector('body').innerText;
})
.then(function (result) {
callback(null, url+result);
});
nightmare.end();
}
async.map(links, scrape, function (err, results) {
if (err) return console.log(err);
console.log(results);
})
あなたが説明するものは非同期ではありません...あなたはそれらをすべて持っていれば、それらを並べ替えることができますか? – dandavis