当前位置: 代码迷 >> JavaScript >> NodeJS:完成多个异步功能后,如何执行操作?
  详细解决方案

NodeJS:完成多个异步功能后,如何执行操作?

热度:92   发布时间:2023-06-07 18:22:56.0

初学者在这里。 我开始意识到,我使用异步函数的方式可能没有充分利用异步特性。

我做这样的事情:

fs.readFile(file, function(err, data){
  fs.readAnotherFile(anotherFile, function(err, data){
      doThisAfterBothHaveLoaded();
    });
  })
})

但是,如果我在开始之前等待一件事情完成,那不是在打破异步的目的吗?

那么我将如何去做这样的事情?:

fs.readfile(file, function(err, data){
  doThisAfterBothHaveLoaded();
});

fs.readAnotherFile(anotherFile, function(err, data){
  doThisAfterBothHaveLoaded();
});

直到两者都加载后才调用回调函数?

根据我们的要求,我们可能需要等待一个操作完成才能开始另一操作。

但是在您的情况下,如果这两个操作互不相关,并且您想在两个操作都完成后执行一些操作,请检查模块。

使用它,您可以编写:

async.each(['file1.txt', 'file2.txt'], function (filename, cb) {
    fs.readFile(filename, function (err, data) {
        if (err) {
            return cb(err);
        }
        console.log("Reading " + filename + " complete!");
        // do something with data
        console.log(data);
        cb(null);
    });
}, function (err) {
    console.log("Reading both files is complete");
});
var i = 0;
fs.readfile(file, function(err, data){
if(i==1) doThisAfterBothHaveLoaded();
else i++
});

fs.readAnotherFile(anotherFile, function(err, data){
if(i==1) doThisAfterBothHaveLoaded(); 
else i++;
});

用诺言。 就像是:

var Promise = require('promise');
var read = Promise.denodeify(fs.readFile);

var p1 = read(file);
var p2 = read(anotherFile);
Promise.all([p1, p2])
.then(function(res) { doThisAfterBothHaveLoaded(); });

参见