Пауза между скриптами

196
20 января 2022, 03:20

есть 2 скрипта асинхронных, запускается первый и дальше ничего не происходит, второй не запускается, просто висит.В чем проблема?

const { promisify } = require('util');
const addOrdersToGoogleSheets = async statuses => {
  console.log("addOrdersToGoogleSheets", statuses) 
};
await promisify(addOrdersToGoogleSheets)([4, 5, 6, 7, 8, 9]);
await promisify(addOrdersToGoogleSheets)(12);
Answer 1

Вам не нужно использовать promisify, т.к. у вас функция и так асинхронная. promisity создает обертку для методов, которые не работает с промисами, а со старым подходом основанным на callback и требует, чтобы ему передавали метод со следующей сигнатурой: (param, callback) => {}. Исправить это можно разными способами: Используя сразу промисы:

const addOrdersToGoogleSheets = async statuses => {
  console.log("addOrdersToGoogleSheets", statuses) 
};
await addOrdersToGoogleSheets([4, 5, 6, 7, 8, 9]);
await addOrdersToGoogleSheets(12);

Использую promisify:

const addOrdersToGoogleSheets = (statuses, callback) => {
  console.log("addOrdersToGoogleSheets", statuses);
  if (callback)
    callback();
};
await promisify(addOrdersToGoogleSheets)([4, 5, 6, 7, 8, 9]);
await promisify(addOrdersToGoogleSheets)(12);

В данном случае callback нужен для того, чтобы понять когда оригинальный метод завершился и можно сделать Promise.resolve(), чтобы вызывающий код мог понять, что промис завершился, поэтому у вас и не вызывается второй часть кода, т.к. по факту первый промис никогда не завершается.

promisity внутри работает примерно так (это не настоящий исходный код):

function primisity(fn) {
    return function (...args) {
        return new Promise(resolve => {
            fn(...args, resolve); // тут и передается функция resolve в качестве callback
        });
    };
};
READ ALSO
Запуск игры с рабочего стола JS

Запуск игры с рабочего стола JS

Можно ли с помощью JS или же другого языка запустить определенный ярлык с рабочего стола Windows 10?

93
new Date() возвращает NaN в Safari

new Date() возвращает NaN в Safari

Перепробовала вообще все, что гугл выдавал - не работает: приведение к числу (parseInt(), Number()) или строке, через setDate()Сталкивались ли вы с таким...

100
Обработка запроса на сервере в потоках. Worker Threads

Обработка запроса на сервере в потоках. Worker Threads

Хочу переписать SSR на сервере, что бы сам рендеринг проходил в отдельном потоке и не блокировал остальные запросы на сервер

116
Отобразить значение input через React-Redux

Отобразить значение input через React-Redux

Я знаю, как получить данные из input конкретно через React(setState и тд), но через React-Redux (reducer) не имею представленияБудет ли правильно, имея систему...

177