gpt4 book ai didi

javascript - "if ( somefunction( ) )"在 node.js 中阻塞了吗?

转载 作者:行者123 更新时间:2023-11-30 07:26:54 26 4
gpt4 key购买 nike

test = function(x){   
if ( some conditions ) { return true; }
else { return false; }
}


if (test(y)) {document.write("You have done this before!")​}​;​

console.log("Checked!");

目的是检查用户过去是否执行过某些操作。这些只是模拟代码,并不能真正反射(reflect)我实际在做什么。

问题:

我是 node.js 的新手,所以如果这听起来微不足道请原谅我。假设 test(y) 为真。我可以确定 console.log 会在 document.write 之后执行吗?即使 test(y) 需要很长时间才能运行?

换句话说,我需要“if (test(y))...”来阻塞。我知道将函数作为参数传递,例如设置间隔(测试(y),100);可以是异步和非阻塞的。但是“if(test(y))...”呢?

最佳答案

NodeJS 同时具有同步(阻塞)和异步(非阻塞)功能。 (更准确地说:函数本身总是“阻塞”,但它们中的一整类开始一些稍后会完成的事情然后立即返回,而不是等待事情完成。这些就是我的意思是“非阻塞”。)

在大多数情况下默认是异步的(他们接受他们开始的事情完成时调用的回调);同步的名称往往以 Sync 结尾。

例如,exists是异步的(非阻塞的),它没有返回值,而是在完成时调用回调。 existsSync是同步的(阻塞);它返回它的结果而不是回调。

如果test是自己的函数,而且只调用同步函数,那么就是同步的:

function test(x) { // Obviously a nonsense example, as it just replicates `existsSync`
if (existsSync(x)) {
// The file exists
return true;
}
return false;
}

// This works
if (test("foo.txt")) {
// ...
}

如果它调用一个异步函数,它就是异步的,所以它不能通过一个可以被if测试的返回值返回一个结果:

// WRONG, always returns `undefined`
function test(x) {
var retVal;

exists(x, function(flag) {
retVal = flag;
});

return retVal;
}

相反,您必须提供回调:

function test(x, callback) {

exists(x, function(flag) {
callback(flag);
});
}

// This works
test("foo.txt", function(flag) {
if (flag) {
// ...
}
});

关于javascript - "if ( somefunction( ) )"在 node.js 中阻塞了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261102/

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