Сообщение об успешном удалении действия

У меня есть действие удаления, выполняемое при удалении элемента (ов). Прямо сейчас, когда элемент удаляется, я получаю одно сообщение на экране. Когда я выбираю несколько элементов для удаления, я получаю кучу сообщений. Например, если я удалю 3 элемента, появится сообщение «Видео было успешно удалено». появляется 3 раза на экране. Как я могу сгруппировать все сообщения в одно на основе успешного ответа и показать что-то вроде «3 видео успешно удалены». и еще одно сообщение, которое показало бы "2 видео не могут быть удалены"? Приведенный ниже код показывает либо успех, либо результат ошибки, но не оба сразу. Ошибка не подсчитывает, сколько вышло из строя. Вот что у меня:

export function idsToDelete (ids) {
return dispatch => {
    const promises = ids.map(id => api.delete(dispatch, id));
    dispatch({
      type: DELETE,
      promise: Promise.all(promises).then((results) => {
        console.log(results.size +"Video deleted.");
       }, error => {
          if(error.type) {
           console.log("video could not be deleted.");
        } else {
          return Promise.reject();
        }
      })
    });
  };

}


person Mustang    schedule 31.10.2017    source источник


Ответы (1)


Вы можете отобразить все обещания в массив, а затем передать Promise.all() как обещание:

const deletePromises = ids.map(id => api.delete(dispatch, id))
dispatch({
  type: DELETE_MANY,
  ids,
  promise: Promise.all(deletePromises)
    .then((results) => {
      // Show the success message only if delete was successful.
      console.log("Videos deleted successfully.");
    }, error => {
        return Promise.reject();
      }
    })
})
person madox2    schedule 31.10.2017
comment
Я попробовал ваше решение. Столкнувшись с некоторыми проблемами, обновил мой код выше. Пожалуйста, дайте мне знать, что происходит не так. - person Mustang; 01.11.2017
comment
С какими проблемами вы столкнулись? - person madox2; 02.11.2017
comment
С приведенным выше кодом он показывает либо успех, либо результат ошибки, но не то и другое одновременно. Ошибка не подсчитывает, сколько не удалось. - person Mustang; 02.11.2017
comment
@Mustang, в этом случае вы можете ловить ошибки внутри Promise.all и искать их в results. Например, такие обещания карты ids.map(id => api.delete(dispatch, id).catch(err => ({ err }))) - person madox2; 02.11.2017