gpt4 book ai didi

javascript - 使用 process.nextTick 或 setImmediate 创建等待函数 - node.js

转载 作者:搜寻专家 更新时间:2023-11-01 00:10:46 24 4
gpt4 key购买 nike

我正在编写一些 Node.js 代码,我认为,由于有 Java 背景,我应该弄清楚如何创建我自己的“等待”功能。显然,它会有点不同,因为 Java 被设计为多线程而 Node 不是。无论如何,我在 Node 中想要的功能是我想自己创建一个阻塞函数——这样如果程序中的某些 bool 值没有设置,我可能想调用 process.nextTick() 直到 bool 值被设置。

那就是:

    var bool = false;

function foo(){
var b = baz();
}

function baz(){

while(!bool){
process.nextTick(function() {
return baz(arguments);
});
}

return {};
}

function setBool(number) {

setTimeout(function () {
bool = false;
}, number);
}

process.nextTick(wait);
setBool(3000);

所以这个问题是双重的:

(1) 这是在 Node.js 中实现等待类型功能的最佳方式吗?

(2) 如果我调用 baz(arguments) 而不是 baz 函数(递归地),在执行方面会发生什么情况?一般来说,当你想要函数X的返回值时,函数X在返回前调用了自己几次,这会不会有问题?是不是没什么大不了的,结果是一样的返回值?我以前考虑过这个问题,但从未真正担心或调查过。

最佳答案

不要在 Node.js 中“等待”。 “等待”阻止所有其他执行。这是一个重要的注意事项,因为如果您阻止,则 bool 值永远不会设置更改。 JavaScript,尤其是在 Node 中,使用事件驱动模型。做这个,做那个。

那么最好的方法是什么?它基于意见,但这是一种方式:

var bool = false;

function foo() {
console.log('Listening for true');
baz(function() {
//Do something when called
console.log('It\'s finally true!');
});
}

function baz(callback) {
setImmediate(function() {
if (bool)
callback();
else
baz(callback);
});
}

foo();
setTimeout(function() {
console.log('Setting to true');
bool = true;
}, 4000);

关于javascript - 使用 process.nextTick 或 setImmediate 创建等待函数 - node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30312160/

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