JS: Вложить цепочки обещаний или сохранить их в том же объеме?

#javascript

#javascript

Вопрос:

Делают ли они, по сути, одно и то же? Я наткнулся на это в примере с обещанием, и лектор вернул выборку, но разве пример 1 не был бы еще одним жизнеспособным способом сделать это?

1

 fetch('url1')
.then(data => data.json())
.then(() => {
    fetch('url2')
    .then((response) => {
       // do things
    })
})
 

2

 fetch('url1')
.then(data => data.json())
.then(() => {
    return fetch('url2')
    
})
.then((response) => {
    // do the same thing but at same scope
});
 

Комментарии:

1. Да, это было бы так, но обычно люди предпочитают избегать вложенности, поскольку это приводит к увеличению количества отступов с увеличением количества цепочек, что приводит к тому, что код занимает половину экрана.

2. Они не совсем идентичны, но довольно близки. В общем, нет причин делать # 1 вместо # 2, и есть много причин делать # 2 вместо этого. Единственная причина делать # 1 — это если вы не хотите, чтобы внешнее обещание действительно ожидало url2 и завершало всю цепочку

Ответ №1:

В примере 1 второй then() решает undefined

В примере 2 второе then() принимает обещание, возвращенное вторым fetch , и поэтому последнее then может возвращать что-то полезное в возвращаемом значении верхнего уровня.


В любом случае. Это довольно подробный код, который мог бы быть намного понятнее с помощью async and await .