0

Добрый вечер господа, интересует такой вопрос.
Как же заставить программу подождать выполнения функции в функции?

Пример кода.

function Get(key)
{
    chrome.storage.sync.get([key], function (result) 
    {     
        console.log(result)
    })
    console.log(1)
}

Собственно понятно что сначало отобразится цифра 1, а после уже выполнится запрос в локальную базу хрома, и собственно как мне можно правильно вернуть результат выполнения
chrome.storage.sync.get ?

CHBS
  • 47
  • http://learn.javascript.ru/promise – qodunpob Aug 17 '16 at 01:35
  • 3
    http://ru.stackoverflow.com/questions/554290/%D0%9A%D0%B0%D0%BA-%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8%D0%B7-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-%D0%B8%D0%BB%D0%B8-%D0%B8%D0%B7-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B3%D0%BE-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B0 – Утка Учится Укрываться Aug 17 '16 at 05:36

2 Answers2

2

Просто запихнуть ожидающий коллбек на уровень ниже

function Get(key) {
    var callback = function () {
        console.log(1);
    };
    chrome.storage.sync.get([key], function (result) {
        console.log(result);
        callback();
    });
}

Наверняка у вас более сложный механизм, но проблема в нем будет решаться точно так же.

Выше очень правильно порекомендовали promise, и там механика будет точно такой же: зарегистрировать желаемый код на выполнение после того, как выполнится блок с chrome.storage.sync.

etki
  • 36,151
-1
function Get(key)
{
    var end = false;

    chrome.storage.sync.get([key], function (result) 
    {
        end = true;
        console.log(result)
    });

    setTimeout(function check() {       
        if(end) {
            console.log(1);
        } else {
            setTimeout(check, 25);
        }
    }, 25);
}