等待一个本身依赖嵌套的promises / observables的服务

时间:2017-08-29 18:36:37

标签: cordova typescript ionic-framework ionic2

我正在尝试在应用程序中使用Ionic Native QR Scanner。由于我需要多个模块中的扫描仪,我认为构建一个可以打开扫描仪并返回结果的简单服务是个好主意。

首先,我使用上面链接中提供的示例代码:

// inside qrScannerService...
public scanQR(): Promise<void> {
    return this.qrScanner.prepare()
        .then((status: QRScannerStatus) => {
            if (status.authorized) {
                let scanSub = this.qrScanner.scan().subscribe((qrResult: string) => {

                    this.qrScanner.hide();
                    scanSub.unsubscribe();
                    // this is what I want, ultimately.
                    return qrResult; 
                });
                this.qrScanner.show();
            } else if (status.denied) {
                console.log("denied");
            } else {
                // permission was denied, but not permanently.
            }
        })
        .catch((e: any) => console.log('Error is', e));
}

这就是服务。在我的模块中,我使用扫描仪服务,如下所示:

private doQRScan() {
    this.qrScannerService.scanQR().then(result => {
        console.log(result);
    });      
}

所以我有一个承诺链doQRScan() - &gt; scanQR() - &gt; prepare() - &gt; scan()我需要等待所有三个< / em> promises / observables,或者我需要重新构建服务方法,但我对Angular来说还是比较新的,到目前为止答案都没有。

目前,prepare()返回其承诺并且doQRScan()已满足,因此永远不会返回实际的QR扫描。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要在scanQR函数中返回新的承诺。我还没有对它进行测试,但是这样的事情对你有用:

TabControl.ContentTemplate

}