【问题标题】:angular 4 assign promise return value to global variable角度 4 将承诺返回值分配给全局变量
【发布时间】:2018-03-14 02:58:04
【问题描述】:

如何将 promise 的返回值分配给外部/全局变量?

在我的 service.ts 中,我有一个返回数字的 promise 方法。

getNumber(username: string): Promise<number> {       
    return this.Test.deployed().then((instance) => {
        return instance.getNumber.call(username);
    })
    .then((value) => {    
      return this.itemsService.getSerialized<number>(value);
    })
    .catch((e) => {
        console.log(e);
    });
  }

在home.component.ts中,我在ngOnInit中调用getNumber()并将其返回值赋给全局变量isGreaterThanZero

isGreaterThanZero: boolean = false;

constructor(private service: myService){}

ngOnInit() {    
    ...
    var result = this.service.getNumber(userName);  

    result.then((value) => {
        if (value > 0) {
            this.isGreaterThanZero = true;
        }          
    })
}

在 html 中,

<button type="button" [disabled]="isGreaterThanZero"

乍一看似乎很容易,但我自己无法弄清楚。感谢您的帮助。

【问题讨论】:

  • 抱歉,您只描述了您打算做什么。这段代码有什么问题?你卡在哪里了?
  • 好吧,不,不要那样做。使用isGreaterThanZero之前必须等待promise
  • 那么我该如何等待并将其返回的数据正确分配给isGreaterThanZero
  • 您正在等待分配它。您可能没有在使用它之前等待。 (如果要在模板中使用,可能需要重新应用,不过我不懂Angular)
  • 上面的语法没有错。甚至他分配的顺序也是正确的。我猜他的承诺不会带来价值。

标签: angular promise undefined


【解决方案1】:
this.service.getNumber(userName).then((value) => {
    if (value > 0) {
        this.isGreaterThanZero = true;
    }          
});

如果这不起作用,请确保您确实从您的承诺中获得了价值。也许你的问题已经定位了。

您可以通过插入 alert() 或 console.log() 来验证这一点。

this.service.getNumber(userName).then((value) => {
    alert('value from promise: ', value);
    if (value > 0) {
        this.isGreaterThanZero = true;
    }          
});

【讨论】:

  • 这与使用临时的result 变量来存储承诺没有什么不同。
  • 对不起,伙计,你太快了。在投票否决我之前,请阅读我的其他 cmets。
  • @Bergi:如果你不了解 Angular,为什么要回答这个问题?
  • 我没有回答问题?虽然我不详细了解 Angular,但我对 JS 的了解已经足够多,并且承诺会得出结论,您的建议不会解决问题。
  • 肯定不会,但有助于调试问题的原因。我确实对 Angular 了解很多。就像我说的。给定示例中的代码是正确的。 isGreaterThanZero 以“false”的值开始,当且仅当收到预期的返回值时才更改为“true”。 Angular 将应用更改的值并重新排列 DOM 元素。
猜你喜欢
  • 2017-04-26
  • 2015-12-13
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多