gpt4 book ai didi

javascript - process.nextTick 的常见方法

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:10 25 4
gpt4 key购买 nike

我应该多久或何时使用 process.nextTick

我明白它的目的(主要是因为 thisthis )。

根据经验,当我必须调用回调时,我总是使用它。这是一般方法还是还有其他方法?

此外,关于here :

It is very important for APIs to be either 100% synchronous or 100% asynchronous.

100% 同步只是意味着从不使用process.nextTick,而100%异步总是使用它?

最佳答案

考虑以下因素:

// API:
function foo(bar, cb) {
if (bar) cb();
else {
process.nextTick(cb);
}
}

// User code:
function A(bar) {
var i;
foo(bar, function() {
console.log(i);
});
i = 1;
}

调用 A(true) 会打印 undefined,而调用 A(false) 会打印 1。

这是一个有点人为的示例 - 显然,在我们进行异步调用之后分配给 i 有点愚蠢 - 但在现实世界中,在调用代码的其余部分完成之前调用回调代码可能会导致微妙的错误。

因此,当您要同步调用回调时,建议使用 nextTick。基本上,任何时候您在调用函数的同一堆栈中调用用户回调(换句话说,如果您在自己的回调函数之外调用用户回调),请使用 nextTick

这是一个更具体的例子:

// API
var cache;

exports.getData = function(cb) {
if (cache) process.nextTick(function() {
cb(null, cache); // Here we must use `nextTick` because calling `cb`
// directly would mean that the callback code would
// run BEFORE the rest of the caller's code runs.
});
else db.query(..., function(err, result) {
if (err) return cb(err);

cache = result;
cb(null, result); // Here it it safe to call `cb` directly because
// the db query itself is async; there's no need
// to use `nextTick`.
});
};

关于javascript - process.nextTick 的常见方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19729918/

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