2016-04-13 2 views
0

Я использую qz print Api для печати меток. У него есть собственная функция (JS), которая отображает принтер по умолчанию в предупреждении. Я хочу отобразить имя принтера в div. Я до сих пор добился этого. Мой код ниже.Функция JS неправильно возвращает значение

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() перед возвращением отображается неопределен, но если сигнал есть, как и выше кода он отображает undefine в предупреждении, но отличный вывод в html, где я его распечатаю. В чем проблема? так как я не хочу предупреждать (но если я его не использую, он показывается неопределенным).

+0

Вам не нужно использовать префикс «useDefaultPrinter()» с «qz.»? У вас также есть без анкерного элемента. –

+0

Вам не нужно префикс «useDefaultPrinter()» с «qz.»? я не получил здесь, я удалил, что я ошибочно набрал –

+0

Попробуйте использовать: var printer_name = qz.useDefaultPrinter(); –

ответ

1

Я знаю очень мало об этом API, но на самом деле это обычная проблема.

qz.findPrinter() функция, как представляется асинхронный - это по-прежнему будет активно работать, когда ваша useDefaultPrinter функция завершена.

Для функций asynchronous вы не можете просто вернуть требуемое значение, потому что оно еще не существует. Наиболее распространенным решением является добавление аргумента «обратного вызова» к вашей функции (callback будет, сам по себе, «функциональной переменной»). Затем вызовите эту функцию обратного вызова, когда доступный объект доступен. В своем коде, это было бы здесь:

// Alert the printer name to user 
printer = qz.getPrinter(); 

После того, как это на месте, вы должны переписать любой код вне потребности useDefaultPrinter.

До:

printer = useDefaultPrinter(); 
// continue operation here... 

После:

useDefaultPrinter(function(printer) { 
    //...continue operation here... 
}); 

Если вы до сих пор путают, поиск Google для "учебники по JavaScript асинхронного программирования". Основываясь на вашем имени пользователя, кажется, что английский не является вашим первым языком, поэтому вам может быть проще следовать, если вы можете найти описание, соответствующее вашему стилю обучения. Обычно это не имеет смысла для большинства разработчиков.

+0

Я не получил u вообще, пожалуйста, помогите –

+0

@AmmarUlHassan Пытался отредактировать мое сообщение, чтобы быть немного яснее. Удачи. – Katana314

Смежные вопросы