阻止javascript函数(node.js)

时间:2014-03-17 22:43:53

标签: javascript node.js

我有这段代码:

var resources = myFunc();
myFunc2(resources);

问题是,JavaScript异步调用myFunc(),然后调用myFunc2(),但我还没有myFunc()的结果。

有没有办法阻止第一次通话?还是一种让这项工作的方法?

3 个答案:

答案 0 :(得分:3)

此代码无效的原因代表了异步javascript的美感和缺陷。它不起作用,因为它不应该。

当执行第一行代码时,您基本上已告知节点执行某些操作并在完成后通知您。然后继续执行下一行代码 - 这就是为什么当你到达这里时你还没有响应的原因。有关这方面的更多信息,我会更详细地研究event-loop。它有点抽象,但它可以帮助你绕过节点中的控制流。

这是回调的来源。回调基本上是一个函数,你传递给另一个函数,该函数将在第二个函数完成时执行。回调的通常签名是(错误,响应)。这使您可以检查错误并相应地处理它们。

//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)
});

正如您可能想象的那样,这可能会很快变得复杂。最终会出现许多嵌套回调,这使得您的代码难以阅读和调试。

额外:

如果您发现自己处于这种情况,我会查看async库。关于如何使用它,这是一个很棒的tutorial

答案 1 :(得分:2)

myFunc(),如果异步,则需要接受回调或返回承诺。通常,您会看到类似的内容:

myFunc(function myFuncCallback (resources) {
    myFunc2(resources);
});

答案 2 :(得分:1)

在不了解您的环境和模块的情况下,我无法为您提供具体的代码。但是,Node.js中的大多数异步函数都允许您指定一旦函数完成就会调用的回调。

假设myFunc调用了一些异步函数,你可以这样做:

function myFunc(callback) {
    // do stuff
    callSomeAsyncFunction(callback);
}

myFunc(myFunc2);