阻止JavaScript函数(node.js)
我有这个代码:
var resources = myFunc(); myFunc2(resources);
问题是,JavaScript调用myFunc()
asynchronous,然后myFunc2()
,但我没有myFunc()
的结果呢。
有没有办法阻止第一个电话? 或者一个方法来使这个工作?
此代码无法正常工作的原因代表了asynchronousJavaScript的美丽和陷阱。 它不工作,因为它不应该。
当第一行代码被执行的时候,你基本上已经告诉节点去做一些事情,并告诉你什么时候完成。 然后它继续执行下一行代码 – 这就是为什么当你到达这里时你还没有响应。 有关这方面的更多信息,我将更详细地研究事件循环 。 这有点抽象,但它可以帮助你在节点的控制stream程中包围你的头。
这就是callback来的地方。callback基本上是一个函数,当你传递给另一个函数时,这个函数将会在第二个函数完成的时候执行。 callback通常的签名是(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) });
正如你可能想象的那样,这可能会很快变得复杂。 结束许多嵌套的callback并不罕见,这些callback使您的代码难以读取和debugging。
额外:
如果你发现自己在这种情况下,我会检查出asynchronous库。 这里是一个很好的教程如何使用它。
myFunc()
,如果是asynchronous的,需要接受callback或者返回一个promise。 通常情况下,你会看到类似于:
myFunc(function myFuncCallback (resources) { myFunc2(resources); });
不知道更多关于你的环境和模块,我不能给你具体的代码。 但是,Node.js中的大多数asynchronous函数允许您指定一个函数完成后将被调用的callback函数。
假设myFunc调用一些asynchronous函数,你可以这样做:
function myFunc(callback) { // do stuff callSomeAsyncFunction(callback); } myFunc(myFunc2);