Есть несколько асинхронных функций которые вызываются вот так:
(async () => {
console.log('1')
await promisify(updateOrdersToAccepted)()
console.log('2')
await promisify(updateTo10)()
console.log('3')
await promisify(addOrdersToGoogleSheets)([4, 5, 6, 7, 8, 9, 10]);
await promisify(ordersQuantity)('DB_LOGISTIC_STATISTICS')
await promisify(ordersQuantity)('DB_LOGISTIC_STAT2')
})()
первая функция отрабатывает без ошибок и завершается.Все, дальше выполнения не идет.
В логах есть только 1.
Мб я что-то упускаю?
// Вот так (грубо говоря) работает promisify
function promisify(fn) {
return (...args) => new Promise((resolve, reject) => {
fn(...args, (err, result) => {
if (err) return reject(err);
resolve(result);
});
});
}
// Промисифицируемая функция должна принимать (err, result) => {} функцию последним аргументом
function someFunc(a, next) {
setTimeout(() => next(null, a), 100);
}
const someFuncPromisified = promisify(someFunc);
(async () => {
console.log(1);
const res = await someFuncPromisified(42);
console.log(res);
console.log(2);
})();
Вообщем нашел решение сам. В функциях добавил параметр next и в конце функции вызывал его,заработало как надо
Думаю как-то так.
function promisify(func) {
return new Promise((res, err) => {
setTimeout(() => {
res(func);
}, 1000);
});
}
function updateOrdersToAccepted(){
console.log("call updateOrdersToAccepted");
}
function updateTo10() {
console.log("call updateTo10");
}
function addOrdersToGoogleSheets(array){
console.log(`call addOrdersToGoogleSheets with params ${[...array]}`);
}
function ordersQuantity(param){
console.log(`call ordersQuantity with params ${param}`);
}
(async () => {
console.log('1');
try {
(await promisify(updateOrdersToAccepted))();
console.log('2');
(await promisify(updateTo10))();
console.log('3');
(await promisify(addOrdersToGoogleSheets))([4, 5, 6, 7, 8, 9, 10]);
(await promisify(ordersQuantity))('DB_LOGISTIC_STATISTICS');
(await promisify(ordersQuantity))('DB_LOGISTIC_STAT2');
}
catch (e){
console.log(e);
}
})()
У вас ошибка в попытке вызвать результат промиса когда он ещё не пришел.
await promisify(ordersQuantity)('DB_LOGISTIC_STATISTICS');
а нужно обернуть результат и потом вызвать.
(await promisify(ordersQuantity))('DB_LOGISTIC_STATISTICS');
В моём примере promisify это моя функция чисто для примера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть динамический роут, который выводит отфильтрованный список товаров, фильтрация происходит в getter во vuex, все бы ничего, но если перезагрузить...
Если пишем новое имя, программа просит ввести номер телефона и запоминает егоЕсли новый номер телефона — просит ввести имя и также запоминает