Я ищу способ дождаться обратного вызова функции перед дальнейшим выполнением в моей программе.Это то, что я исследовал ранее, и у меня есть пара небольших трюков, которые я могу вам сначала показать:
// You can wrap the rest of your code in the callback
/* executing code */
asyncFunction((err, callback)=>{
if(err)console.log(err)
else{
/* The rest of your program */
}
})
// You can do function chaining (use this to parallel asyncs)
var arr = newArray(2).fill(false)
asyncParallel()
function asyncParallel(){
asyncFunction1((err,callback)=>{
if(err)console.log(err)
else{
arr[arr.indexOf(false)] = true
allDone()
}
}
asyncFunction2((err, callback)=>{
if(err)console.log(err)
else{
arr[arr.indexOf(false)] = true
allDone()
}
}
}
function allDone(){
if(!arr.includes(false)){
theRest()
}
}
function theRest(){
/* the rest of your code */
}
// You can wrap all of your code in a generator function
function* gen(){
/* your code */
yield something
/* the rest of your code */
}
var g = gen()
g.next()
asyncFunction((err, callback)=>{
if(err)console.log(err)
else{
g.next()
}
}
//You could also download a fancy pants module which I have no time for
Однако я ищу конкретный способ ожидания обратного вызова.По сути, я хочу, чтобы axios.get
сработал, и тогда моя программа выходит за пределы этого шага и попадает в пробку, а при обратном вызове я хочу освободить пробку.Это должно выглядеть следующим образом:
axios.get('myUrl').then(res=>{trigger()})
/* function to wait for trigger */
/* the rest of my code */
Возможно, у вас возникнет соблазн поместить цикл while, но это остановит выполнение любого следующего кода:
var x = false
axios.get('myUrl').then(res=>{x = true})
while(x === false){
// this will stop any other code from executing.
// x will never be set to true.
}
Кроме того, установка таймаута не приведет кработать в этом случае, потому что она сама по себе является асинхронной функцией и не будет препятствовать дальнейшему выполнению кода (если она не заключена в функцию, которая вызывается в обратном вызове):
axios.get('myUrl').then(res=>{x = true})
setTimeout(/*I could put the code in here, but I don't want
to.*/, 10000)
/* code here will get executed before callbacks */
Есть ли способ поставитьтриггер в моем обратном вызове, и есть ли специальная функция, не блокирующая код, ожидающая этого триггера, прежде чем переходить любой другой код без необходимости заключать весь мой код в другую функцию?Я с нетерпением жду ваших ответов и надеюсь, что этот пост помог людям!