#javascript #функции #chrome_extension
This question already has answers here:
Как вернуть значение из события или из функции обратного
вызова? Или хотя бы дождаться их окончания
(3 ответа)
Закрыт 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 .
Ответы
Ответ 1
Так как в данном случае функция 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 внутри этой функции - будут нужным значением ... });
Комментариев нет:
Отправить комментарий