阻止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);