Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 从承诺中提取实际数据并分配给变量_Angular - Fatal编程技术网

Angular 从承诺中提取实际数据并分配给变量

Angular 从承诺中提取实际数据并分配给变量,angular,Angular,我的第一次尝试是有棱角的。我试图将承诺中的值赋给一个变量,但我无法使它工作。我想使用最后一个变量在“选择”下拉列表中填充国家数据 console.log("1",this.globals.countryMasterDummy); this.globals.countryMasterDummy.then(function(data){console.log("2",data)}); this.globals.countryMasterDummy.then(function(data: Countr

我的第一次尝试是有棱角的。我试图将承诺中的值赋给一个变量,但我无法使它工作。我想使用最后一个变量在“选择”下拉列表中填充国家数据

console.log("1",this.globals.countryMasterDummy);
this.globals.countryMasterDummy.then(function(data){console.log("2",data)});
this.globals.countryMasterDummy.then(function(data: Countrymaster){ this.scanCountries = data}); 
console.log('3', this.scanCountries) ;  
this.globals.countryMasterDummy.then((data) => {   
  this.scanCountries = data;})
  .catch((ex) => {
      console.log(ex);});
console.log('4', this.scanCountries) ; 
外部的.scanCountries变量(声明为公共扫描国家:Countrymaster)。然后()失去值,因此无法在填充下拉列表时使用此变量

console.log("1",this.globals.countryMasterDummy);
this.globals.countryMasterDummy.then(function(data){console.log("2",data)});
this.globals.countryMasterDummy.then(function(data: Countrymaster){ this.scanCountries = data}); 
console.log('3', this.scanCountries) ;  
this.globals.countryMasterDummy.then((data) => {   
  this.scanCountries = data;})
  .catch((ex) => {
      console.log(ex);});
console.log('4', this.scanCountries) ; 
控制台MSG随附:

更新代码:

this.globals.countryMasterDummy.then((data) => {   
  this.scanCountries = data;
  this.countryLoaded = true;
 // console.log('this.scanCountries',this.scanCountries);
})
  .catch((ex) => {
      console.log(ex);});
 <div *ngIf="countryLoaded ; else loading; ">
            <span>Country</span> 
            <select class="form-control" [(ngModel)]="selectedOption">
              <option [ngValue]="null">ALL</option>            
              <option *ngFor="let scanCountry of scanCountries" [value]="scanCountry.alpha2_Country_Code"  >{{ scanCountry.Country_Name }}</option>
          </select>
          </div>
HTML:

this.globals.countryMasterDummy.then((data) => {   
  this.scanCountries = data;
  this.countryLoaded = true;
 // console.log('this.scanCountries',this.scanCountries);
})
  .catch((ex) => {
      console.log(ex);});
 <div *ngIf="countryLoaded ; else loading; ">
            <span>Country</span> 
            <select class="form-control" [(ngModel)]="selectedOption">
              <option [ngValue]="null">ALL</option>            
              <option *ngFor="let scanCountry of scanCountries" [value]="scanCountry.alpha2_Country_Code"  >{{ scanCountry.Country_Name }}</option>
          </select>
          </div>

国家
全部的
{{scanCountry.Country_Name}

承诺表示异步过程的结果。它异步调用您传递给then()的回调,即稍后,当结果可用时。因此,在调用then()之后,不能期望结果立即可用。就像,当你发送一封电子邮件时,你不能期望在发送后立即收到回复。这不应阻止下拉列表填充:它将在
this.scanCountries=data时填充被执行,因为Angular将检测到更改。这是否回答了您的问题?@JB Nizet/@UncleDave--感谢您的回复,理解这个示例很容易,参考链接对像我这样的初学者也很有帮助……在代码中添加了一些内容,以保证以后的数据可用性……现在可以工作了……感谢……文章中的代码更新。承诺是JavaScript的一个特性,而不是角度。