如何在 if - else 语句中处理异步回调?
How to handle asynchronous callbacks within an if - else statement?
对于一个项目,我需要在一个接一个执行的五个 if 语句中更改文件中的一些值,在完成所有这些事情之后,我需要保存文件。其中一项更改包含异步保存图像功能。我遇到的问题是程序开始写入文件时该功能尚未完成。我应该如何处理 if 语句中的回调?保存图像功能应该在程序进行到下一个if语句之前执行。
if(criterium1){... //Alter file}
if(criterium2){
saveImage(searchValue, folder,callback(error)){
... //Alter file
}
if(criterium3){... //Alter file}
fs.writeFile(opfFile, xml, function(error) {
callback(null);
});
var saveImage = function(searchValue, folder, callback){
var images = require ('google-images2');
images.search(searchValue, function(error, image){
callback(null);
});
};
任何人都可以告诉我如何处理这个问题吗?
谢谢!
亲切的问候,
伊娃
您可以使用异步库,特别是它的 series
控制流。 https://caolan.github.io/async/docs.html#series
您想将 if 语句作为数组中的任务执行(第一个参数)。确保在完成异步操作后调用回调。第二个参数是一个回调,将在您完成所有任务时执行。
async.series([
function(callback){
if(criterium1) {
//Alter file
// make sure to call the callback
} else {
callback(null, null);
}
},
function(callback){
if(criterium2) {
//Alter file
// make sure to call the callback
// looks like you can just pass callback into the saveImage function
} else {
callback(null, null);
}
}
], function () {
fs.writeFile(opfFile, xml, function(error) {
callback(null);
});
});
尝试将所有函数包装在一个 promise 中
正如 Transcendence 所说,异步非常适合这种流程。
我只是写了一个简单的 async-if-else 模块,因为我在链步骤上遇到了类似的问题。
async.waterfall([
async.if(criterium1, fnCriterium1),
async.if(criterium2, fnCriterium2),
async.if(criterium3, fnCriterium3).else(fnCriteriumAlternative)
], handler);
希望对您有所帮助!
干杯
对于一个项目,我需要在一个接一个执行的五个 if 语句中更改文件中的一些值,在完成所有这些事情之后,我需要保存文件。其中一项更改包含异步保存图像功能。我遇到的问题是程序开始写入文件时该功能尚未完成。我应该如何处理 if 语句中的回调?保存图像功能应该在程序进行到下一个if语句之前执行。
if(criterium1){... //Alter file}
if(criterium2){
saveImage(searchValue, folder,callback(error)){
... //Alter file
}
if(criterium3){... //Alter file}
fs.writeFile(opfFile, xml, function(error) {
callback(null);
});
var saveImage = function(searchValue, folder, callback){
var images = require ('google-images2');
images.search(searchValue, function(error, image){
callback(null);
});
};
任何人都可以告诉我如何处理这个问题吗? 谢谢! 亲切的问候, 伊娃
您可以使用异步库,特别是它的 series
控制流。 https://caolan.github.io/async/docs.html#series
您想将 if 语句作为数组中的任务执行(第一个参数)。确保在完成异步操作后调用回调。第二个参数是一个回调,将在您完成所有任务时执行。
async.series([
function(callback){
if(criterium1) {
//Alter file
// make sure to call the callback
} else {
callback(null, null);
}
},
function(callback){
if(criterium2) {
//Alter file
// make sure to call the callback
// looks like you can just pass callback into the saveImage function
} else {
callback(null, null);
}
}
], function () {
fs.writeFile(opfFile, xml, function(error) {
callback(null);
});
});
尝试将所有函数包装在一个 promise 中
正如 Transcendence 所说,异步非常适合这种流程。
我只是写了一个简单的 async-if-else 模块,因为我在链步骤上遇到了类似的问题。
async.waterfall([
async.if(criterium1, fnCriterium1),
async.if(criterium2, fnCriterium2),
async.if(criterium3, fnCriterium3).else(fnCriteriumAlternative)
], handler);
希望对您有所帮助!
干杯