如何在Typescript中异步运行函数?

时间:2017-08-01 08:42:14

标签: typescript asynchronous ionic-framework

我想以异步方式运行我的函数,但我该怎么做?:

    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

1 个答案:

答案 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);
    });
}