Anjular Promise 不设置变量

anjular promise not set a variable

本文关键字:变量 设置 Promise Anjular      更新时间:2023-09-26

>我不会在其他函数中处理 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);
            });
   }();