Anjular Promise 不设置变量
anjular promise not set a variable
>我不会在其他函数中处理 promise,但在工作后第一个回调变量没有改变。请帮助我。在这里查看我的代码:
this.handlerLocalDef = function(defer) {
var hash = {};
defer.then(
function(response) {
hash = response;
},
function(err) {
showPopup(err);
}
);
return hash;
};
var initialized = function() {
var localRegDef = Localization.getLocalizedDefer('regularform'),
localPaymDef = Localization.getLocalizedDefer('payment');
localizeRegForm = self.handlerLocalDef(localRegDef, localizeRegForm);
$timeout(function() {
console.log("localizeRegForm", localizeRegForm);
},5000);
}();
console log return me localizeRegForm: {}
通过执行hash = response
,您只是将局部变量设置为引用另一个对象。原始返回对象的接收方仍保留该对象。一个快速的解决方案是做 angular.extend(hash,response);
.这会将 respose 的所有成员复制到 hash
引用的对象中,这是原始返回的对象。因此,接收者会突然看到这些成员。
警告:既不适用于值(字符串、数字、布尔值、未定义、null),也不适用于数组。
这是对上述建议的摆弄,有效:http://jsfiddle.net/sVRCg/3/
但是,我感觉整个设置是错误的。你怎么知道hash
实际上是用response
扩展的?轮询(例如 setTimeout
)是一个尴尬的解决方案。我建议你把承诺还给别人;这样,您可以准确了解响应何时可用。
另一种方法是ngResource
如何做到这一点;这很复杂,请查看代码。
这不是你做异步编程的方式。
您没有设置任意超时并希望此时有数据,您必须按预期方式使用延迟对象并使用回调。这是重构代码以使其正常工作的一种方法。根据您的具体情况,它可能会也可能不符合您的目的:
this.handlerLocalDef = function(defer,callback) {
defer.then(
function(response) {
callback.apply(this,[response])
},
function(err) {
showPopup(err);
}
);
};
var initialized = function() {
var localRegDef = Localization.getLocalizedDefer('regularform'),
localPaymDef = Localization.getLocalizedDefer('payment');
self.handlerLocalDef(localRegDef,function(response) {
console.log(response);
});
}();
相关文章:
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- Javascript使用变量设置属性
- 敲除js变量设置类似于调用函数
- 使用输入变量设置元素的值
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 将外部控制器的范围变量设置为角度
- 谷歌地图标记在通过变量设置标记和经度时不保持不变
- 尝试在 jquery ajax 帖子中将变量设置为URL 的一部分
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 如何将宽度和高度变量设置为浏览器窗口的宽度和高度
- 如何将变量设置为外部内容
- 需要将变量设置为特定的数字范围
- 执行批处理文件的Javascript,该文件包含基于每个会话的环境变量设置
- 如何在jquery中基于变量设置某个东西的宽度
- 将变量设置为等于本地JSON文件
- 根据Angular中的单独变量设置下拉默认值
- 如何使用JavaScript变量设置函数集css宽度
- 如何为一个javascript变量设置give多个值
- 如何将javascript变量设置为php变量并将其存储在数据库中
- 如何在javascript中为变量设置一行setter