Таким образом, вопрос довольно прямо вперед - должно .then
вернуть последнее обещание внутри тела функции?
Например:
Promise.resolve().then(function() {
Promise.resolve(1)
Promise.resolve(2)
}).then(function(val) {
return val;
})
Должно ли оно возвращать последнее значение (2), когда обещание разрешается?
Я работаю с некоторым устаревшим кодом, и эта конструкция довольно распространена среди некоторых модулей, но она не работает.
Это не должно работать, потому что первое затем возвращает обещание неопределенного.
Возможно, вам стоит взглянуть на Promise.all() https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
Если
.then
возвращает последнее обещание внутри тела функции?
Нет. Функция ( в том числе then
обратного вызова) должна возвращать все обещания внутри своего тела. То есть, если вы явно не хотите игнорировать некоторые из них.
Конечно, функция может возвращать только одно значение, поэтому оно может только вернуть одно обещание. Если вы делаете несколько вещей, делайте их один за другим и связываете свои обещания или делаете их сразу, а затем выполняете обещание, которое ждет всех результатов с помощью Promise.all
.
Также обратите внимание, что .then(function(val) { return val; })
бессмысленна и должна быть отброшена.
then
так , что он будет решать наval
второгоthen
. Поэтому, если вы напишитеreturn Promise.resolve(2)
тогдаval
будет2
, аPromise.resolve(1)
будет оборванным Promise, который не является частью цепочки. Не совсем понятно, что вы хотите спросить с помощью этого произвольного примера.