Мне нужно написать функцию, которая выполняет два цепных HTTP-вызова и воздействует на результат, как только будут получены результаты второго вызова.
Подход, который я думал, сработает:
Это работает нормально, вывод на консоль соответствует ожидаемому.
Затем я перенес эту идею на свой реальный вызов, главное отличие в том, что HTTPS-вызовы медленные. Чтобы отобразить фактическую ошибку в коде, рассмотрим небольшой вариант кода выше (с добавлением некоторой регистрации)
Вывод на консоль (из моего реального кода) похож на
11:36:56.388 undefined
11:36:56.456 filter-sentinels.js:42 Response {type: "cors", url: …}
Подробнее:
- первый
undefined
от console.log(x)
- вторая строка от
console.log(s)
Казалось бы, Обещание разрешается во второй строке, которая идет после первой. Это нормально, для этого и есть обещания.
Что я не понимаю, так это , почему .then()
в m.then(x => console.log(x) ))
выполняется, когда обещание еще не выполнено?
Примечание к заголовку: что я действительно хочу понять, так это то, могу ли я рассматривать генерируемый Обещание (let m = ...
) как нечто синхронное - в том смысле, что я могу безопасно применить then()
к нему и что происходит в then()
произойдет, когда известная информация известна (возвращен HTTP-вызов).