typescript - 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()`
}
因此,即使该方法为真,该方法也总是返回假。
解决方案
其实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);
});
推荐阅读
- ruby-on-rails - 无法部署应用程序 - aws eb 上的 ruby
- sql - SQL 日期时间 2019 年 1 月 25 日下午 4:06:45
- c# - 如何在 Unity 2d 中制作推进器?
- tsql - 在一个表的列中分解 csv 以插入新表
- git - 为什么git没有在分支更改中隐藏空文件夹?
- c# - 从其他脚本 Unity 访问脚本
- java - 通过处理与 Arduino 通信的问题
- python - 使用 python-markdown-math 渲染降价的问题
- php - PHP; 通过浏览器与 CLI 访问时,cURL 的行为不同
- java - Spring Boot 应用程序无法启动,并出现错误“应用程序需要一个 bean,但找到了 2 个”