JS函数未正确返回值

JS function not returning value properly

本文关键字:返回值 函数 JS      更新时间:2024-06-29

我使用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(printer),它会显示未定义,但如果警报像上面的代码一样存在,它会在alert中显示未定义但在我打印它的html中显示完美输出。问题是什么?因为我不想提醒(但如果我不使用它,它显示为未定义)。

我对这个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...
});

如果你仍然感到困惑,可以在谷歌上搜索"JavaScript异步编程教程"。根据你的用户名,英语似乎不是你的第一语言,所以如果你能找到一个适合你学习风格的描述,可能会更容易理解——这对大多数开发人员来说一开始往往没有意义。