process.nextTick的常用方法
Common approach to process.nextTick
我应该多久或何时使用process.nextTick
?
我理解它的目的(主要是因为这个和这个)。
根据经验,当我必须调用回调时,我总是使用它。这是一般方法还是还有更多方法?
另外,在这里:
API 必须是 100%同步或 100% 异步非常重要。
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)
打印未定义,而调用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`.
});
};
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 在canjs中,根据任何模型实例的存在,有条件地显示胡子模板部分的最常用方法是什么
- process.nextTick的常用方法
- 服务与控制器与外部JS将常用方法放在AngularJS中
- 使用 JavaScript 访问 MongoDB 的常用方法是什么?
- 对不存在的元素进行转义的常用方法是什么(如jQuery)
- 最常用的生成PDF报告的方法(JavaScript,node.js)
- 如何将常用方法提取到函数中
- 如何使用map()调用对象列表的常用方法
- 是解决按钮点击太快的最佳常用方法
- 停止angularjs中重复请求的常用方法
- 防止由于“引号”符号而导致串联时出错的常用方法
- 对象选择和调整大小的常用方法