На данный вопрос уже ответили:
Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания
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 внутри этой функции - будут нужным значением
...
});
Комментариев нет:
Отправить комментарий