gpt4 book ai didi

node.js - 如何使用NodeJS模块await?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:56 24 4
gpt4 key购买 nike

我有以下使用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

一切似乎都在兑现 promise ,顺利进行。但是,它看起来像是同步执行而不是异步执行。我本来希望看到:

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 秒多。

最佳答案

sleep 是阻塞的,并且不会将控制权返回给事件循环,因此您的代码只是在它所说的 sleep 位置 sleep 。

如果将其转换为异步,请使用 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

这对我来说看起来是正确的。

关于node.js - 如何使用NodeJS模块await?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35613321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com