Итак, часы и часы я ломал голову, чтобы заставить работать эту асин c схему:
1) У меня есть сообщение функции подготовки, которое асин c, так как оно должно получить скачать вложение
2) У меня есть функция отправки сообщения, которая вызывает API Gmail и отправляет подготовленное сообщение. Эта функция возвращает функцию обратного вызова, которую я готов использовать onSuccess
3) У меня есть al oop, для которого вызывается эта функция sendMessage, которая вызывает функцию preparemessage
Все работает как положено, l oop создает N вызовов с N ответами. Однако функция обратного вызова, очевидно, настроена раньше и получает результат последнего значения в для.
Это часть кода:
arrayOfMessagesToBeSent=[{msg1},{msg2}...] (got from the store)
for (const x of arrayOfMessagesToBeSent) {
store.actions.gapi.sendMessage(
await store.actions.mailing.prepareMsg(
{messageStuf}
),
(answer) => {
console.log("call:", x.id);
store.actions.mailing.sendCallback(answer, x.id);
};
);
}
После завершения подготовки сообщения оно отправляется. Я получаю один действительный ответ на каждое отправленное письмо. Однако l oop для продолжает работать в фоновом режиме и переопределяет это значение x.id
store.actions.mailing.sendCallback (answer, x.id); => Ответ следует за хорошим потоком => Ответ различен для каждого сообщения => x.id переопределяется и при каждом выполнении этой функции получает только x.id
Знаете ли вы, как я могу синхронизировать Это? Таким образом, в основном я хочу, чтобы функция обратного вызова (или эта переменная x.id) ожидала окончания подготовки сообщения.
Вариант A: Лучший: сообщения готовятся, когда отправляются другие. Это было бы лучшим решением
Вариант B: Если это невозможно, по крайней мере, поток:
1) подготовить 2) отправить 3) обратный вызов и затем go со вторым сообщением 1) подготовить 2) отправить 3) обратный вызов ... было бы достаточно
Примечание: я не хочу использовать обещание всех с .map (). Я не хочу подготавливать ВСЕ сообщения, а затем отправлять ВСЕ сообщения, для моего варианта использования лучше было бы использовать al oop, а вариант B.
Спасибо!