我有一些看起来像这样的同步代码:
function bulk_upload(files, callback) {
for (file in files) {
sync_upload(file); // blocks till file uploads
}
print('Done uploading files');
callback();
}
我现在必须使用异步 APIasync_upload(file, callback)
而不是sync_upload(file)
这样做。我有多种选择,但不确定什么是最好的:
1)sleep
在for循环之后使用a - 这是一个黑客,因为我必须希望我的时间是正确的
2)递归链接我的数组:
function bulk_upload(files, callback) {
if (files.length == 0) {
print('Done uploading files');
callback();
} else {
async_upload(files.removeLast(), function() { bulk_upload(files, callback); });
}
}
这不仅是 hacky,而且不是最理想的,因为我可以使用新的async_upload
API 并行上传我的文件,但我最终还是按顺序上传。
3)使用全局计数器:
function bulk_upload(files, callback) {
uploads = 0
for(file in files) {
async_upload(file, function() { uploads++; });
}
while(uploads < files.length) ; // Empty spin - this is stupid
print('Done uploading files');
callback();
}
4)稍微好一点的计数器(但仍然很糟糕):
function bulk_upload(files, callback) {
uploads = 0
for(file in files) {
async_upload(file, function() {
if (++uploads == files.length) { // this becomes uglier as I want to await on more stuff
print('Done uploading files');
callback();
};
});
}
}