bugfix> typescript > 投稿

Returnステートメントは、分度器のコードよりも早く実行されます

public newcc(newc:string):boolean
{
  var Outcome:boolean=false;
  this.Cc.getText().then(function (text){
    var Name=text.toString();
    var str_array = Name.split(',');
    console.log("Cce : "+Name);
    for(var i:number=0;i<str_array.length;i++) {
      // if the name is found then make the outcome true and break 
      if(str_array[i]==cc) {
        console.log(str_array[i] +" is equal to "+ClinicName);
        Outcome=true;
        console.log("Inside Outcome " +Outcome);
        break;
      } else {
        console.log(str_array[i] +" is not equal to "+Cc); 
      }
    }        
  });  
  return Outcome;
  // the return always exectued earlier than above `this.ClinicList.getText()`
}

このため、メソッドはtrueであってもfalseを返します。

回答 1 件
  • 実際に return   this.ClinicList.getText() の背後で実行されます 。明確な理解を得るには、すべての分度器APIが非同期で実行され、Promiseを返すことを知る必要があります。また、Promiseを理解する必要もあります。

    Nodejsがこの関数を実行するとき、行 this.ClinicList.getText().then() に実行するとき 、この行はpomiseを返し、次に移動して次の行を実行します: return Outcome

    キーポイントは getText() です  非同期であるため、ページからテキストを読み取る実際の作業は非同期で実行されるため、実際の作業はnodejsが return Outcome を実行するよりも後に開始されます 。

    public CliniclistClinicAvailability(ClinicName:string): any
    {
      // i guess this.ClinicList is decleared as `element.all()`
      return this.ClinicList.getText().then(function (texts){
         // texts is an Array<string>
         return texts.includes(ClinicName);
      )};
    }
    // how to use above function:
    // CliniclistClinicAvailability return a promise, 
    // you need to consumer the promise's eventually value in `then()`
    CliniclistClinicAvailability('Test').then(function(isAvailable:boolean){
       console.log('isAvailable: ' + isAvailable);
    });
    
    

あなたの答え