我试图了解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;
});
};
答案 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;
});
};