gpt4 book ai didi

node.js - 检测 async.queue 何时完成

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:48 25 4
gpt4 key购买 nike

我在 async.queue ( https://github.com/caolan/async ) 中添加了很多域名,然后进行 dns 查找。由于某种原因,异步库中的 drain 事件被调用得太早,要么是在队列的开头,要么是之后不久。我想知道队列实际何时结束,以便我可以使用结果。

如果有人可以推荐另一个库或方法来排队作业,我不需要使用这个异步库,我只是想让它工作。

const dns = require('dns');
const async = require('async');
const MaxConcurrent = 2; // only do x DNS lookups at one time
const MaxWait = 1000; // wait for a second before dns timeout


var dnsQueue = async.queue(function(domain, lookupAgain) {
setTimeout(
function() {
dns.resolve(domain, function (err, address)
{
console.log('domain: ' + domain + " address: " + address)
});
lookupAgain();
}, MaxWait);
}, MaxConcurrent);


// This should run when the queue is finished
dnsQueue.drain = function() {
console.log('done??');
}

// Array of domain names
var uniqueDomains = [
'google.com',
'yahoo.com',
'ask.com',
'cnn.com',
'real.com'
];

// Push each domain name into the dnsQueue
uniqueDomains.forEach(function(domain) {
dnsQueue.push(domain);
});

最佳答案

如果您正在使用 nodejs v7.6 及更高版本,那么您不妨试试 async/await。下面是在 nodejs 应用程序中使用 async/await 的示例:

async function fun1(req, res){
let response = await request.get('http://localhost:3000');
if (response.err) { console.log('error');}
else { console.log('fetched response');
}

在上面的示例中,代码要求运行代码的 javascript 引擎等待 request.get() 函数完成,然后再转到下一行执行它。 request.get() 函数返回用户将等待的 Promise。在 async/await 之前,如果需要确保函数以所需的顺序运行,即一个接一个地运行,请将它们一个接一个地链接起来或注册回调。

有关异步/等待的更多信息,请点击以下链接:

关于node.js - 检测 async.queue 何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52561288/

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