我在Android应用程序中使用Barcodescannerplugin for Phonegap在Javascript中遇到了问题。
我使用的插件带来了一个小的Javascript,可以在我的Phongap应用程序中使用Barcodescanner。但在我看来,提供的javascript函数的界面并不是最优的,因为我不想在我使用这些方法的每个位置都进行错误处理。
这就是为什么我试图让界面变得更简单,我只需要调用方法scanBarcode()
并且调用脚本从扫描中获取文本或者什么都没有,如果某些内容失败。这是代码:
function scanBarcode(){
var resultText = '';
window.plugins.barcodeScanner.scan(
function(result) {
if (!result.cancelled){
resultText = result.text;
}
},
function(error) {
alert("Scanning failed: " + error);
}
);
return resultText;
}
我使用的插件可以在Github Phonegap Plugins Android/BarcodeScanner
找到我的方法的结果总是相同的,一个空字符串。 我认为原因是变量范围,但我不确定如何解决问题。
答案 0 :(得分:3)
原因是因为window.plugins.barcodeScanner.scan
方法异步执行 - 在方法返回之前不会调用成功回调。
我建议从你的方法返回一个Promise
对象,所以像(以jQuery为例):
var result = $.Deferred();
window.plugins.barcodeScanner.scan(
function(result) {
if (!result.cancelled){
result.resolve(result.text);
}
},
function(error) {
result.reject(error);
}
);
return result;
答案 1 :(得分:1)
感谢您的帮助,现在有效:)
对于其他所有遇到这些问题的人来说,分辨率看起来像这样:
function scanBarcode(){
var resultObject = $.Deferred();
window.plugins.barcodeScanner.scan(
function(result) {
if (!result.cancelled){
resultObject.resolve(result.text);
} else {
resultObject.resolve('');
}
},
function(error) {
resultObject.resolve('');
}
);
return resultObject;
}
现在只需说出以下内容即可轻松获得扫描值:
function clickScanBarcode(){
var result = scanBarcode();
result.done( function(text){
alert('Barcodetext:'+text);
});
}
我已经更改了错误代码并取消了方式,我总是得到一个空字符串来处理。在我的情况下,更多的错误处理是没用的。
问候, 马库斯