Promise.all ответ

1

Могу ли я добавить Promise.resolve(value) и Promise.reject(error) в ответ Promise.all().

Например,

function transferFRQ(fromUserId, fromCompanyDetails, toUserDetails, toCompanyDetails,) {
  return Promise.all([
    transferRFQCompany(fromCompanyDetails, toCompanyDetails),
    replaceRFQCreatedBy(fromUserId, toUserDetails)
  ])
    .then(result => Promise.resolve(result))
    .catch(error => Promise.reject(error));
}

function transferRFQCompany (fromCompanyDetails, toCompanyDetails) {
  return new Promise((resolve, reject) => {
    Request.updateMany({
      "company.id": fromCompanyDetails._id
    }, {
      $set: {
        company: {
          id: toCompanyDetails._id,
          name: toCompanyDetails.name,
          logo: toCompanyDetails.logo
        }
      }
    }).then(result => resolve(result))
      .catch(error => reject(error));
  });
}

function replaceRFQCreatedBy (fromUserId, toUserDetails) {
  return new Promise((resolve, reject) => {
    Request.updateMany({
      "createdBy.id": fromUserId
    }, {
      $set: {
        createdBy: {
          id: toUserDetails._id,
          firstName: toUserDetails.firstMame,
          lastName: toUserDetails.lastName
        }
      }
    }).then(result => resolve(result))
      .catch(error => reject(error));
  });
}

Я не знаю, правильно ли это или нет, но мне нужно обработать ответ transferRFQ должным образом, потому что мне нужно будет добавить transferRFQ в другой Promise.all() для правильной обработки ошибки.

Я делаю не так? если да, то как это сделать правильно

Любые дополнительные советы приветствуются!

  • 0
    да, вы делаете это неправильно. Request.updateMany уже возвращает обещание, а затем вы заключаете его в другое обещание. вы должны просто return Request.updateMany... вместо
  • 0
    Таким образом, простой return result и return error решат проблему. Вы уверены, что?
Показать ещё 7 комментариев
Теги:
promise

1 ответ

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

Я советую вам не использовать ненужные обертки Promise и избегать подъема javascript.

Вы должны попытаться сделать что-то подобное

// Note that this is declared before used, to avoid javascript hoisting
function transferRFQCompany (fromCompanyDetails, toCompanyDetails) {
    return Request.updateMany({ // updateMany already returns a promise right? no need to wrap it in another promise
      "company.id": fromCompanyDetails._id
    }, {
      $set: {
        company: {
          id: toCompanyDetails._id,
          name: toCompanyDetails.name,
          logo: toCompanyDetails.logo
        }
      }
    })
  });
}

// Note that this is declared before used, to avoid javascript hoisting
function replaceRFQCreatedBy (fromUserId, toUserDetails) {
  return Request.updateMany({ // updateMany already returns a promise right? no need to wrap it in another promise
    "createdBy.id": fromUserId
  }, {
    $set: {
      createdBy: {
        id: toUserDetails._id,
        firstName: toUserDetails.firstMame,
        lastName: toUserDetails.lastName
      }
    }
  })
}

function transferFRQ(fromUserId, fromCompanyDetails, toUserDetails, toCompanyDetails,) {
  return Promise.all([
    transferRFQCompany(fromCompanyDetails, toCompanyDetails),
    replaceRFQCreatedBy(fromUserId, toUserDetails)
  ])
}
// Sample usage async/await style
(async () => {
  try {
      // put your params, of course
      const result = await transferFRQ(...params); 
      // 'result' is result of .then()
  } catch (e) {
    // 'e' is result of .catch()
  }

  // or use it in promise-style
  transferFRQ(...params)
    .then(console.log)
    .catch(console.error)
})()

Ещё вопросы

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