Страницы

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

пятница, 20 декабря 2019 г.

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

#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 внутри этой функции - будут нужным значением ... });

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

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