【发布时间】:2017-01-17 19:39:44
【问题描述】:
我想从 do while 循环中调用一个异步函数,并且仅当该函数没有返回值时才退出。 有没有一种方法来管理这个而不必在回调之外实际等待?
这是显然总是在第一个循环中退出的代码,因为函数还没有回调,当 while () 被评估时:
var i = 0;
do {
var foundListing;
if (i) {
listing.slug = listing.slug + '-' + (i + 1);
}
listingService.getListingBySlug(listing, function(error, pFoundListing) {
if (error) {
return callback(util.errorParser(error));
} else if (Object.keys(pFoundListing).length) {
foundListing = pFoundListing;
i++;
}
});
//Do I have to wait here???
} while (foundListing && Object.keys(foundListing).length);
澄清: 这里的重点是生成一个独特的 slug。如果蛞蝓已经存在,我会附加一个数字并再次检查它是否存在。当我到达尚不存在的号码时,我就完成了。
更新: 我找到了一种使用递归的方法。我将工作的 sn-p 发布为answer。
【问题讨论】:
-
变量'i'的声明在哪里..
-
您正在尝试将异步调用放入同步结构中。基本上,代码在循环的每次迭代中不断地调用
listingService.getListingBySlug,javascript 可以以最大速度执行该循环。你确定是你想做的吗? -
@GiacomoCosimato 恰恰相反。由于
foundListing在开始时为空,while()部分在第一个循环中始终评估为 false,因为它是在尚未执行的回调中设置的。不管怎样,这不是我想要的。如果在listingService.getListingBySlug中找到了列表,我只想再次进入循环。
标签: javascript node.js asynchronous async-await do-while