You are currently viewing Как дождаться завершения обещания, прежде чем возвращать переменную функции?

Как дождаться завершения обещания, прежде чем возвращать переменную функции?

Здесь обещание-это возвращаемый объект из асинхронной функции, к которому могут быть добавлены методы обратного вызова на основе результата предыдущей функции. Это делается для последовательного выполнения функций, действующих как очередь или цепочка функций. Таким образом, поскольку функции находятся в очереди, функции, следующие за ней, должны дождаться результата предыдущей функции. Для этого есть два популярных способа, описанных ниже.

Использование функции setTimeout (): Чтобы дождаться завершения обещания перед возвратом переменной, функцию можно задать с помощью функции setTimeout(), чтобы функция ждала несколько миллисекунд.

Ниже программа проиллюстрирует подход:

Программа :

<script>
const wait=ms=>new Promise(resolve => setTimeout(resolve, ms));

function failureCallback(){
	console.log("This is failure callback");
}

wait(4*1000).then(() => {
	console.log("waited for 4 seconds");
	throw new Error("error occurred");
}).catch(() => {
	failureCallback();
});

wait(2*1000).then(() => console.log("waited for 2 seconds"));					
</script>

Выход:

waited for 2 seconds
waited for 4 seconds
This is failure callback

Использование функции async или await() : Этот метод можно использовать, если точное время, требуемое в setTimeout (), не может быть указано. Ключевое слово async используется для создания асинхронной функции, которая возвращает обещание, которое либо отклонено, либо разрешено. Обещание отклоняется, когда из этой функции возникает неперехваченное исключение или оно разрешается иным образом. Ключевое слово await используется внутри асинхронной функции, чтобы приостановить ее выполнение и дождаться обещания.

Приведенная ниже программа проиллюстрирует подход:

Программа :

<script>
//This function returns promise after 2 seconds
var first_function = function() {
console.log("Entered first function");
return new Promise(resolve => {
	setTimeout(function() {
	resolve("\t\t This is first promise");
	console.log("Returned first promise");
	}, 2000);
});
};
//This function executes returns promise after 4 seconds
var second_function = function() {
console.log("Entered second function");
return new Promise(resolve => {
	setTimeout(function() {
	resolve("\t\t This is second promise");
	console.log("Returned second promise");
	}, 4000);
});
};

var async_function = async function() {
console.log('async function called');

const first_promise= await first_function();
console.log("After awaiting for 2 seconds," +
"the promise returned from first function is:");
console.log(first_promise);

const second_promise= await second_function();
console.log("After awaiting for 4 seconds, the" +
"promise returned from second function is:");
console.log(second_promise);
}

async_function();				
</script>					

Выход :

async function called Entered first function Returned first promise After awaiting for 2 seconds, the promise returned from first function is:  This is first promise Entered second function Returned second promise After awaiting for 4 seconds, the promise returned from second function is:  This is second promise