4

拥有我认为应该是一个相对容易的问题来处理是一个主要的痛苦......我正在尝试做:

a.b("param", function(data)
{
     logger.debug("a.b(" + data.toString() + ")");

     if (data.err == 0)
     {
           // No error, do stuff with data
     }
     else
     {
           // Error :(  Redo the entire thing.
     }
});

我的方法是尝试:

var theWholeThing = function() {return a.b("param", function(data)
{
     logger.debug("a.b(" + data.toString() + ")");

     if (data.err == 0)
     {
           // No error, do stuff with data
     }
     else
     {
           // Error :(  Redo the entire thing.
           theWholeThing();
     }
})};

上面的问题是前者确实有效(发生错误时没有处理除外),后者根本不会打印日志消息......它好像“theWholeThing()”调用没有像我认为的那样工作它应该(再次调用整个事情)。

这里一定有一些微妙的错误,有什么提示吗?

谢谢!

4

2 回答 2

5

首先,直接回答您的问题,听起来您第一次忘记实际调用该函数。尝试:

var theWholeThing = function() {return a.b("param", function(data)
{
     logger.debug("a.b(" + data.toString() + ")");

     if (data.err == 0)
     {
           // No error, do stuff with data
     }
     else
     {
           // Error :(  Redo the entire thing.
           theWholeThing();
     }
})};

theWholeThing(); // <--- Get it started.

但是,这可以在命名的 IIFE(立即调用的函数表达式)中更优雅地实现:

// We wrap it in parentheses to make it a function expression rather than
// a function declaration.
(function theWholeThing() {
    a.b("param", function(data)
    {
         logger.debug("a.b(" + data.toString() + ")");

         if (data.err == 0)
         {
               // No error, do stuff with data
         }
         else
         {
               // Error :(  Redo the entire thing.
               theWholeThing();
         }
    });
})(); // <--- Invoke this function immediately.
于 2012-12-03T05:34:42.107 回答
0

如果把方法分开,用变量来表示,事情就清楚了。您只需要将您的 ab 和匿名函数视为方法引用。我认为此代码示例可以提供帮助:

var theWholeThing = a.b, //this is a reference of b method
    par = "param",
    callback = function(data){
     logger.debug("a.b(" + data.toString() + ")");

     if (data.err == 0)
     {
           console.log("no error");    
     }
     else
     {
           console.log("Error");
           // theWholeThing reference can be accessed here and you can pass your parameters along with the callback function using variable name 
           theWholeThing("param", callback); 
     }
}; //declare the callback function and store it in a variable

theWholeThing("param", callback); //invoke it

​</p>

于 2012-12-03T05:49:59.590 回答