#javascript #async-await #sapui5 #es6-promise
Вопрос:
У меня есть функция (скажем, функция 1), которая на полпути вызывает вызов OData в другой функции (скажем, функция 2). У меня есть некоторый процесс после вызова OData в функции 1, который зависит от ответа на вызов чтения OData в функции 2.
В настоящее время во время выполнения функции 1, когда вызывается функция 2, функция 2 выполняется, но ответ OData принимается только после выполнения оставшихся строк функции 1. Есть ли способ дождаться ответа на вызов OData в функции 2 до того, как будут выполнены остальные строки функции 1?
Я очень новичок в асинхронном программировании. Но то, что я пробовал, это:
function1: function() { //some code this.function2(); //some code amp; this is executed before success/error function of the OData call in function2 } function2: async function() { //oModel declaration const oPromise = await new Promise((resolve, reject) =gt; { oModel.read("/entityset", { success: (oData) =gt; { resolve(oData) }, error: (oError) =gt; {} }); }).then((oData) =gt; { //some code }); }
Ответ №1:
Вы находитесь в хорошем направлении. Вы должны позвонить function2
с await
заявлением внутри function1
. Необходимым условием для этого является сделать function1
async
слишком:
function1: async function() { //some code await this.function2(); //some code amp; this will execute after success/error function of the OData call in function2 } function2: async function() { //oModel declaration const oPromise = await new Promise((resolve, reject) =gt; { oModel.read("/entityset", { success: (oData) =gt; { resolve(oData) }, error: (oError) =gt; {} }); }); }