我正在使用qz print Api来打印标签。它有自己的功能(JS),它在警报中显示默认打印机。我想在div中显示打印机名称。到目前为止我已经实现了。我的代码如下。
function useDefaultPrinter() {
var printer;
if (isLoaded()) {
// Searches for default printer
qz.findPrinter();
window['qzDoneFinding'] = function() {
// Alert the printer name to user
printer = qz.getPrinter();
window['qzDoneFinding'] = null;
defaultFound = true;
};
}
alert(printer);
return(printer);
}
用于显示HTML
var printer_name = useDefaultPrinter();
lbDownHtml += "<div><span>Default printer found: '" + printer_name + "'</span>";
lbDownHtml += "</div>";
问题是如果我在返回之前没有在useDefaultPrinter()中使用alert(打印机)它显示未定义,但如果警报就像上面的代码一样,它会在警告中显示undefine但在html中完美输出我打印它。有什么问题?因为我不想提醒(但如果我不使用它,它显示未定义)。
答案 0 :(得分:1)
我对此API知之甚少,但这实际上是一个常见问题。
qz.findPrinter()
功能似乎异步 - 当useDefaultPrinter
功能完成后,它仍会正在运行。
对于异步函数,您不能简单地返回所需的值,因为它尚不存在。最常见的解决方案是为函数添加一个“回调”参数(callback
本身就是一个“函数变量”)。然后,当您需要的对象可用时调用该回调函数。在您的代码中,这将是:
// Alert the printer name to user
printer = qz.getPrinter();
一旦到位,您需要重写所有需要的代码useDefaultPrinter
。
在:
printer = useDefaultPrinter();
// continue operation here...
后:
useDefaultPrinter(function(printer) {
//...continue operation here...
});
如果您仍感到困惑,请在Google上搜索“JavaScript异步编程教程”。根据您的用户名,英语似乎不是您的第一语言,因此如果您能找到符合您学习风格的描述,可能会更容易理解 - 对于大多数开发人员来说,它一开始就没有意义。