gpt4 book ai didi

node.js - 如何在前一个函数完成之前阻止一个函数? Node

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

有一个 for 循环,其动态值可以从小到大,我想确保在下一个搜索调用开始之前完成对搜索的调用。我怎么做?我读过 process.nextTick 和 setImmediate 但我不确定如何在这种情况下使用它们。

function search(x) {
dns.resolve(x, function (err, addresses) {
if (!err) {
res.send("bad");
} else {
res.send("good");
}
});
}

for(a = 0; a < queries.length; a++) {
query = queries[a];
search(query);
}

最佳答案

有一些库可以帮助您组织异步代码的执行。 Async我用的是eachSeries()在这里很有用:

function search(x,callback) {
dns.resolve(x, function (err, addresses) {
if (!err) {
res.send("bad");
} else {
res.send("good");
}
callback(err);
});
}

async.eachSeries(queries,
function(query,callback) {
search(query,callback);
},
function(err) {
if(err) {
console.log("we had an error");
}
}
);

请注意,一旦其中一个迭代出现错误,Async 将立即调用最终回调,因此如果您不想就此停止,则需要在search() 而不是 callback(err)

更新(不使用库):

如果你不想使用库,你可以像这样自己实现它:

function searchInternal(queries, idx, callback) {
if(idx === queries.length) {
callback();
return;
}

dns.resolve(queries[idx], function (err, addresses) {
if (!err) {
res.send("bad");
} else {
res.send("good");
}
searchInternal(queries, idx+1, callback);
});
}

function searchAll(queries, callback) {
searchInternal(queries, 0, callback);
}

searchAll(queries, function() {
console.log("all done now");
});

请注意,此代码未经测试,可能不是最佳实现,但这就是我们使用库的原因。

关于node.js - 如何在前一个函数完成之前阻止一个函数? Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936127/

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