Как вернуть как ранний результат, так и окончательный асинхенный результат с использованием обещания?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как вернуть как ранний результат, так и окончательный асинхенный результат с использованием обещания?

Сообщение Anonymous »

Когда я делаю запрос на сообщение, сервер немедленно реагирует с идентификатором, но фактический результат получен позже через событие Push Server (например, WebSocket или Pusher). < /p>
Вот что я пытаюсь сделать: < /p>
, когда API отвечает с помощью ID, я хочу сразу уведомлять пользователь, что начнутся событие Push. Фактический результат (полученным позже через серверный толчок) и разрешите обещание с этим конечным результатом. < /p>
Задача заключается в том, что я могу вызовать Resolve () только один раз в обещании.function handleAsync(payload, endpoint, callBack) {
return new Promise((resolve, reject) => {
// Step 1: POST call and returns id
callAPI(payload).then((response) => {
if (response.jobId) {
callBack(response.id); // notify caller early
// Wait for server push (via WebSocket or similar) and then resolve
}
});

// Step 2: Push listener will receive final result later and call resolve/reject
// ...
});
}
< /code>
Мне хочется использовать обратный вызов, просто для передачи идентификатор немного хакерский.
Есть ли лучший шаблон для обработки этого случая - может быть, возвращение оба значения более структурированным образом? Например: < /p>
return {
id,
result: new Promise(...),
};
< /code>
Но тогда кажется неловким нарушать единый поток обещаний. < /p>
Вопрос: < /p>
Есть ли чистый, основанный на обещаниях способ вернуть оба: < /p>
Непосредственное значение (ID) и окончательный результат, который разрешается позже (например, с сайта или сервера)? Или использует обратный вызов единственным разумным способом?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-promise
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»