了解AngularJS中的承诺

时间:2017-09-29 12:27:28

标签: javascript angularjs

我试图了解Angular中的承诺。但我仍在混合概念。请查看Angular 1.0.7中的以下示例:

// After locale is set code should be executed
initLocale(language).then(function (result) {               
    console.log("Insert code here");
});

有人可以帮我理解为什么这段代码有效:

var initLocale = function(language) {
    return $translate.uses(language);
};

这段代码不是:

var initLocale = function(language) {
    $translate.uses(language).then(function(result) {
        // I need to do things here! For example call another 
        // Asynchronous function.
        tmhDynamicLocale.set(language).then(function () {        
                console.log("Locale started!");                                                     
            });
        return result;                                                                      
    });
};

2 个答案:

答案 0 :(得分:1)

第一个示例中,您返回了promise

在第二个示例中,您在return函数中使用了callback语句,这是错误的。

原因是在return result 异步功能完成之前.set行正在执行。

如果您将return result;替换为console.log(result),您会看到在console.log("Locale started!")之前收到结果;

此外,.then方法用于处理promise结果,因此您需要从函数返回promise

答案 1 :(得分:1)

$translate.uses(language)返回Promise。

  

我需要在这里做事!例如,调用另一个异步函数。

如果您想在results之后解决tmhDynamicLocale.set(language),请使用Promise chain:

var initLocale = function(language) {

  var data = {}; 

   return  $translate.uses(language).then(function(result) {
       data.result = result;            
        return tmhDynamicLocale.set(language);
      }).then(function () {  
           // do your stuff here      
           return data.result;                                                               
        });                                                                                         
};

Simple Demo Fiddle