将异步函数添加到异步瀑布
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将异步函数添加到异步瀑布相关的知识,希望对你有一定的参考价值。
我正在尝试开发NodeJS应用程序,但它不会按预期执行。我想先执行downloadIMG然后执行featureMatching并继续执行,直到for循环终止。指导我以适当的方式重写代码。
for (var i=0; i<dbImgCount; i++) {
(function(i) {
async.waterfall([
async function downloadIMG(done) {
try {
var options = {
url: FolderPath[i].FolderPath,
dest: '/home/ubuntu/imgCompare/'
}
const { filename, image } = await download.image(options);
image2 = 'image.jpg';
done(null, 'hi');
} catch (e) {
console.error(e)
}
},
async function featureMatching(a, done){
const img1 = cv.imread(image1);
const img = 'image.jpg';
const img2 = cv.imread(img);
const orbMatchesImg = matchFeatures({
img1,
img2,
detector: new cv.ORBDetector(),
matchFunc: cv.matchBruteForceHamming
},
(console.log(image1+','+img))
);
done(null);
}
],
function (err) {});
})(i);
}
答案
得到了here的答案。通过将asgs作为数组从async函数返回,可以在异步瀑布中使用异步函数。
像这样
async.waterfall([
// ...
async function (arg1, arg2) {
//...
const arg3 = await foo()
return [arg1, arg2, arg3] //USE THIS, OTHERWISE 2ND fn WON'T WORK
},
function ([arg1, arg2, arg3], callback) {
//...
}
],function (err) {});
以上是关于将异步函数添加到异步瀑布的主要内容,如果未能解决你的问题,请参考以下文章