如何在if-else语句中处理异步回调?

时间:2015-04-25 08:35:28

标签: node.js if-statement asynchronous synchronization

对于一个项目,我需要在一个接一个执行的五个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);
    });
 };

任何人都可以给我任何关于如何处理这个的指针吗? 谢谢! 亲切的问候, EVA

3 个答案:

答案 0 :(得分:4)

正如超越所说,异步对于那种流动来说真的很好。

我刚写了一个简单的async-if-else模块,因为我的连锁步骤上遇到了类似的问题。

async.waterfall([
   async.if(criterium1, fnCriterium1),
   async.if(criterium2, fnCriterium2),
   async.if(criterium3, fnCriterium3).else(fnCriteriumAlternative)
 ], handler);

我希望这可以帮到你!

欢呼声

答案 1 :(得分:1)

您可以使用异步库,特别是其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);
 });
});

答案 2 :(得分:0)

尝试将所有函数包装在promise