JS函数未正确返回值
JS function not returning value properly
我使用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异步编程教程"。根据你的用户名,英语似乎不是你的第一语言,所以如果你能找到一个适合你学习风格的描述,可能会更容易理解——这对大多数开发人员来说一开始往往没有意义。
相关文章:
- 根据是否解析了 Promise 从函数返回值
- Angular,函数在(模型)工厂中返回值
- Javascript中带有返回值的嵌套函数
- 从Ajax函数返回值
- HTML如何根据javascript函数的返回值限制文本输入
- 使用在函数外部声明的变量的 Javascript 返回值 + undefined
- 如何从嵌套的API函数返回值
- 如何记录调用另一个函数的函数的返回值
- 即使使用回调函数也无法返回值
- PHP 函数不会向 JavaScript 变量返回值
- 从异步函数返回值
- 我如何才能继续'如果'语句来比较作为参数的多个函数返回值
- 从节点中的回调函数返回值
- 从另一个文件访问函数的返回值
- 从JSP页面调用Java Script函数未返回值
- jquery csv函数,如何返回值
- Scala提升了如何运行javascript函数并将返回值存储在变量中
- 等待函数完成,然后将返回值分配给变量JS
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 在 html 输入字段中使用返回值函数