Эквивалентны ли эти 2 обещания?

1

Из учебника я следующий код

  createShoppingList: (store, shoppinglist) => {
    return api.addNewShoppingList(shoppinglist).then(() => {
      store.dispatch('populateShoppingLists')
    }, () => {
      store.commit(types.ADD_SHOPPING_LIST, shoppinglist)
    })
  }

обратите внимание на запятую после блока.then()

Это эквивалентно цепочке.then()?

  createShoppingList: (store, shoppinglist) => {
    return api.addNewShoppingList(shoppinglist)
    .then(() => {
      store.dispatch('populateShoppingLists')
    })
    .then(() => {
      store.commit(types.ADD_SHOPPING_LIST, shoppinglist)
    })
  }

или это только блок внутри.then()? лайк:

return api.addNewShoppingList(shoppinglist)
.then(
() => { store.dispatch('populateShoppingLists')}, 
() => { store.commit(types.ADD_SHOPPING_LIST, shoppinglist) }
)

спасибо за отзыв

  • 4
    Нет, запятая не ПОСЛЕ .then () ... она внутри ... вторая функция обратного вызова для .then - это то, что вызывается при отклонении
  • 0
    хорошо, спасибо ... так что, похоже, в этом коде есть ошибка, так как ОБА store.commit и store.dispatch должны быть выполнены, когда apI.addNewShoppingList разрешен ... в этом oredr. совершить потом отправить ..)
Показать ещё 3 комментария
Теги:
promise

2 ответа

3
Лучший ответ

нет

.then(resolved, rejected)

не равна

.then(resolve)
.then(rejected)// :/

его довольно похоже на:

.then(resolved)    
.catch(rejected)

(Тем не менее, разница в том, что теперь отклонение внутри будет уловлено, а верхняя версия не будет удалена)

  • 0
    Нет, это больше похоже на .catch(rejected).then(resolved) , но не полностью. Вы заметите разницу, если ваш метод resolved() выдаст еще одну ошибку; rejected не поймает это здесь.
  • 0
    @ Томас нет, это всегда будет входить тогда ...: /
Показать ещё 4 комментария
0

Нет,

.then(resolved, rejected)

больше похожа

.catch(rejected)
.then(resolved)

но не полностью, как с .then(resolved, rejected) результат этой функции перенаправляется на следующее обещание и никогда друг к другу.

var resolved = value => 'resolve(${value})';
var rejected = err => 'catched(${err})';
var throwing = () => { throw "thrown Error" };

Promise.resolve(42)
  .then(resolved, rejected)
  .then(v => console.log("then(a,b) => ", v));
  
Promise.reject(42)
  .catch(rejected)
  .then(resolved)
  .then(v => console.log("catch(b).then(a) => ", v));
  
//and that why .then(a,b) ain't like .then(a).catch(b)
Promise.resolve(42)
  .then(throwing, rejected)  
  .then(v => console.log("then(throw,b) => ", v))
  .catch(err => console.log("then(throw,b) => ", err));


Promise.resolve(42)
  .then(throwing)
  .catch(rejected)  
  .then(v => console.log("then(throw).catch(b) => ", v))
  .catch(err => console.log("then(throw).catch(b) => ", err));
.as-console-wrapper{top:0;max-height:100%!important}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню