如何使用 NodeJS 模块等待



我有以下代码使用在技术上可以工作的 await 模块(我认为)。

var await = require('await')
var sleep = require('sleep')
var things = await('one', 'two');
function getData(key){      
  console.log("IN FUNCTION " + key);
  sleep.sleep(5);
  var data = "got data for " + key;
  things.keep(key, data);
  console.log("DONE WIH FUNCTION " + key);
}

console.log("start");
getData('one');
getData('two');
console.log('end');
things.then(function(got){
  console.log(got.one);
  console.log(got.two); 
} 
);

输出为:

start
IN FUNCTION one
DONE WIH FUNCTION one
IN FUNCTION two
DONE WIH FUNCTION two
end
got data for one
got data for two

一切似乎都得到了传递,因为它应该履行承诺。但是,它看起来是同步执行的,而不是异步执行的。我本来希望看到:

start
IN FUNCTION one
IN FUNCTION two
DONE WIH FUNCTION one
DONE WIH FUNCTION two
end
got data for one
got data for two

它也需要大约 10 秒,而大麦应该只需要 5 秒以上。

睡眠是阻塞的,并且没有将控制权返回给事件循环,因此您的代码只是在它说睡眠的地方休眠。

如果将其转换为异步,则setTimeout如下所示:

function getData(key){      
  console.log("IN FUNCTION " + key);
  setTimeout(function() {
    var data = "got data for " + key;
    things.keep(key, data);
    console.log("DONE WIH FUNCTION " + key);
  }, 5000);
}

我得到这个输出:

start
IN FUNCTION one
IN FUNCTION two
end
DONE WIH FUNCTION one
got data for one
got data for two
DONE WIH FUNCTION two

这对我来说是正确的。

最新更新