我想以异步方式运行我的函数,但我该怎么做?:
checkLocation() {
return __awaiter(this, void 0, Promise, function* () {
while (true) {
setTimeout(function () {
this.diagnostic.isLocationEnabled().then(
(isAvailable) => {
console.log('Is available? ' + isAvailable);
if (!isAvailable) {
alert('Please turn on the location service');
}
}).catch((e) => {
console.log(e);
});
}, 5000)
}
});
}
}
发现的问题之一是TS无法正确命名__awaiter
。我试图关注this
答案 0 :(得分:1)
正如我在评论中所说,__awaiter
不是你写的。如果您async
/ await
函数,则由TypeScript编译器输出。
你说你想做什么:
[它]应检查位置服务(在电话上)是否异步启用
检查将是异步的,因为this.diagnostic.isLocationEnabled
是异步的。
async
/ await
撰写checkLocation
的方式是使其成为async
方法,这将消耗来自isLocationEnabled
的承诺await
1}}:
async checkLocation() {
const isAvailable = await this.diagnostic.isLocationEnabled();
console.log('Is available? ' + isAvailable);
if (!isAvailable) {
alert('Please turn on the location service');
}
return isAvailable;
}
非async
/ await
版本是明确使用承诺:
checkLocation() {
return this.diagnostic.isLocationEnabled().then(isAvailable => {
console.log('Is available? ' + isAvailable);
if (!isAvailable) {
alert('Please turn on the location service');
}
return isAvailable;
});
}
请注意,我已删除catch
处理程序,因为通过返回promise,您将错误处理推迟给调用者。
如果checkLocation
意味着发射并忘记而不是返回(承诺)该标志,那么你根本不会使用async
函数而不会返回承诺(因此保留catch
):
checkLocation() {
this.diagnostic.isLocationEnabled().then(isAvailable => {
console.log('Is available? ' + isAvailable);
if (!isAvailable) {
alert('Please turn on the location service');
}
}).catch((e) => {
console.log(e);
});
}