我正在尝试在应用程序中使用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扫描。
有什么想法吗?
答案 0 :(得分:2)
您需要在scanQR函数中返回新的承诺。我还没有对它进行测试,但是这样的事情对你有用:
TabControl.ContentTemplate
}