Страницы

Поиск по вопросам

пятница, 2 ноября 2018 г.

Как вернуть значение из асинхронной функции? [дубликат]

На данный вопрос уже ответили: Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа Как правильно возвратить значение в этой функции ? function getValue(variable, defaultvalue) { chrome.storage.sync.get({ [variable]: defaultvalue, }, function(items) { if (items[variable]) { return items[variable]; } }); }
Вот так не получается,а если return items[variable] заменить на alert(items[variable]) то успешно выводиться что нужно,а если с return то возвращает undefined Нужно чтобы при alert(getValue('test', 'var')) возвращалось то, что мне нужно, а не undefined .


Ответ

Так как в данном случае функция getValue ничего не возвращает, то результат выполнения
getValue(variable, defaultvalue)
всегда будет undefined
Возможные пути решения:
Пробросить callback - функцию, которая будет вызвана при успешном выполнении, например
function getValue(variable, defaultvalue, successCallback) { chrome.storage.sync.get({ [variable]: defaultvalue, }, function(items) { if (items[variable]) { successCallback(items[variable]);//вызываем callback если все хорошо } }); }
И вызывать ее следующим образом:
getValue(variable, defaultvalue, function(items){//items внутри этой функции - будут нужным значением ... }) Можно использовать Promise, например так:
function getValue(variable, defaultvalue, successCallback) { return new Promise(function(resolve, reject){ chrome.storage.sync.get({ [variable]: defaultvalue, }, function(items) { if (items[variable]) { resolve(items[variable]);//говорим что все хорошо }else{ reject(/*тут можно указать причину почему все плохо*/); } });
}); }
И использовать так
getValue(variable, defaultvalue).then(function success(items){//items внутри этой функции - будут нужным значением ... });

Комментариев нет:

Отправить комментарий