[英]Blocking javascript functions (node.js)
我有以下代码:
var resources = myFunc();
myFunc2(resources);
问题是JavaScript调用了myFunc()
异步,然后myFunc2()
,但是我还没有myFunc()
的结果。
有没有办法阻止第一个电话? 还是使这项工作可行的方法?
此代码无法正常工作的原因代表了异步javascript的美丽和陷阱。 它不起作用,因为它不应该这样做。
当执行第一行代码时,您基本上已经告诉节点去做一些事情,并告诉您什么时候完成。 然后继续执行下一行代码-这就是为什么到这里时还没有响应的原因。 有关更多信息,我将更详细地研究事件循环 。 这有点抽象,但是它可以帮助您将控制头缠绕在节点中。
这就是回调的来源。回调基本上是您传递给另一个函数的函数,该函数将在第二个函数完成时执行。 回调的通常签名是(err,response)。 这使您可以检查错误并进行相应处理。
//define first
var first = function ( callback ) {
//This function would do something, then
// when it is done, you callback
// if no error, hand in null
callback(err, res);
};
//Then this is how we call it
first ( function (err, res) {
if ( err ) { return handleError(err); }
//Otherwise do your thing
second(res)
});
如您所料,这很快就会变得很复杂。 最终会出现许多嵌套的回调,这使您的代码难以阅读和调试,这并不罕见。
额外:
myFunc()
如果异步,则需要接受回调或返回诺言。 通常,您会看到以下内容:
myFunc(function myFuncCallback (resources) {
myFunc2(resources);
});
在不了解您的环境和模块的情况下,我无法为您提供特定的代码。 但是,Node.js中的大多数异步函数都允许您指定一个在函数完成后将被调用的回调。
假设myFunc调用了一些异步函数,则可以执行以下操作:
function myFunc(callback) {
// do stuff
callSomeAsyncFunction(callback);
}
myFunc(myFunc2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.