Я думаю, вы хотите что-то подобное.Я предполагаю, что под This is blocking
вы подразумеваете, что synchronousFunction
не является асинхронным.В этом случае его не нужно использовать в обещании, подобном моде.
mainFunction()
.then(resultOfMyFunction => {
//return promise from async function
return asyncFunction();
})
.then(resultOfPromise => {
let resultOfSynchronousFunction = synchronousFunction(resultOfPromise);
// End of function
})
.catch(error => {
// Do I need to return error?
});
, если вы хотите вернуть resultOfSynchronousFunction
, тогда вы должны прочитать Как мне вернуть ответ от асинхронного вызова?
Если вы хотите вернуть асинхронную версию synchronousFunction
, вам нужно заключить это в обещание:
mainFunction()
.then(resultOfMyFunction => {
//return promise from async function
return asyncFunction();
})
.then(resultOfPromise => {
return new Promise((resolve, reject) => {
let resultOfSynchronousFunction = synchronousFunction(resultOfPromise);
// End of function
resolve(resultOfSynchronousFunction);
});
})
.then(resultOfSynchronousFunction => {})
.catch(error => {
// Do I need to return error?
});
Если вы хотите выполнить еще один асинхронный вызовпосле synchronousFunction
лучший шаблон будет:
mainFunction()
.then(resultOfMyFunction => {
//return promise from async function
return asyncFunction();
})
.then(resultOfPromise => {
let resultOfSynchronousFunction = synchronousFunction(resultOfPromise);
// End of function
return anotherAsyncCall(resultOfSynchronousFunction );
})
.then(resultOfanotherAsyncCall => {})
.catch(error => {
// Do I need to return error?
});