Как дождаться ответа на операцию чтения службы OData в SAPUI5 перед дальнейшим выполнением кода?

#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; {}  });  }); }