2015-09-16 3 views
-1

Вот функция, которую я бы хотел вызвать для ее возвращаемого значения, и в этой функции я хотел бы использовать асинхронный вызов, который установил бы флаг для работы с последним:Ожидание асинхронного обратного вызова, затем возврат

function getSomething() { 
    var isOk; 

    myAsyncFunction(function(data) { 
     if (data === 'foo') { 
      isOk = true; 
     } 
    }); 

    //... 

    if (isOk) { 
     return true; 
    } 
} 

Я хотел бы использовать getSomething(), как это:

if (getSomething()) {...} 

Я знаю, что он не будет приостанавливать выполнение этой функции ждать мой асинхронный вызов, чтобы закончить. Я также знаю, что возвращаемое истинное утверждение не должно быть в обратном вызове функции async. Но как я могу ждать обратного вызова функции async? Должен ли я преобразовать вызов getSomething() в обещание или есть другой способ? И как бы выглядел бы вызов getSomething(), если я буду использовать обещания? Заранее спасибо!

+0

'myAsyncFunction' должен вернуть обещание, вы должны верните это обещание с 'getSomething'. –

+0

* «Но как я могу ждать обратного вызова функции асинхронной функции?» * Вы не можете, это невозможно. Единственный вариант - использовать обратные вызовы, как напрямую, так и на обещающих объектах. –

ответ

0

Вы можете использовать JavaScript Promise

var promise = new Promise(function(resolve, reject) { 


    if (/* everything turned out fine */) { 
    resolve("worked!"); 
    } 
    else { 
    reject(Error("broke")); 
    } 
}); 

Как использовать

promise.then(function(result) { 
    console.log(result); // "worked!" 
}, function(err) { 
    console.log(err); // Error: "broke" 
}); 

Для получения дополнительной информации вы можете посетить эту ссылку Promise

+1

Но вы все еще не можете использовать возвращаемое значение в 'if'. Вы не можете ** ждать ** для асинхронных действий. – Barmar

Смежные вопросы