JS函数没有正确返回值

时间:2016-04-13 17:48:24

标签: javascript jquery html printing

我正在使用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中完美输出我打印它。有什么问题?因为我不想提醒(但如果我不使用它,它显示未定义)。

1 个答案:

答案 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异步编程教程”。根据您的用户名,英语似乎不是您的第一语言,因此如果您能找到符合您学习风格的描述,可能会更容易理解 - 对于大多数开发人员来说,它一开始就没有意义。