2014-02-07 37 views
0

我有一些使用匿名函数的javascript代码。我怀疑,但不确定的是,这些函数的调用与代码中的顺序无关。JavaScript中的代码顺序

app_service.callbackOfSomeKind(function (result) { 
    console.log("result: 1"); 

}); 

app_service.AnotherCallback(function (result) { 
    console.log("result: 2"); 

}); 

如何确保结果2打印结果1后???我如何确保AnotherCallback甚至没有被JS看到,直到在callbackOfSomeKind中的代码运行?我正在考虑这样做:

app_service.callbackOfSomeKind(function (result) { 
    console.log("result: 1"); 

    app_service.AnotherCallback(function (result) { 
     console.log("result: 2"); 

    }); 

}); 

但是有没有更好的方法?

+4

是;使用承诺。 – SLaks

+0

它在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise。但它是“实验性”的。 – loveNoHate

回答

2

的承诺是巨大的,我建议寻找到他们,但通过使用命名的回调,而不是anons一种方法来简化嵌套wihout大规模的重构:

function someCallback(result) { 
    console.log("result: 1"); 
    app_service.AnotherCallback(someOtherCallback); 
} 

function someOtherCallback(result) { 
    console.log("result: 2"); 
} 


app_service.callbackOfSomeKind(someCallback); 
以这种方式

,你仍然可以得到执行您需要的顺序,但没有嵌套anon回调,难以维护和调试。我想这是你的第一个和第二个例子之间的妥协,但降低了复杂性和关闭成本。