首页 > 解决方案 > Return 语句比量角器中的代码更早执行

问题描述

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()`
}

因此,即使该方法为真,该方法也总是返回假。

标签: typescriptprotractor

解决方案


其实return是在后面执行的this.ClinicList.getText()。要清楚地了解,你需要知道所有量角器 API 都是异步执行并返回 Promise,你还需要了解 Promise。

当 Nodejs 执行这个函数时,当运行到 line 时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);
});

推荐阅读