我的代码有问题。我需要返回promise中的值,但不知道如何实现。我是ECS6的新手

以下是我的createDate函数:

var createData = function (i, object) {
return new Promise(function(resolve) {
  var item = object[i]
  handleDiease(item.disease).then(function (diseaseId) {
    handleCountry(item.country).then(function (countryId) {
      handleStatus(lodash.capitalize(item['status(no/failed attempt/yes/friend)'])).then(function (statusId) {
        handleType(lodash.capitalize(item["type(o/p)"])).then(function (typeId) {
          ContactBLL.create({
            name: item.name,
            organisation: item.organisation,
            email: item.email,
            phonenumbers: item.phone,
            facebook_url: item.facebook_url,
            contactdate: item.date,
            da_name: item.donation_affiliate_name,
            da_url: item.donation_affiliate_url,
            article_url: item.article_url,
            //isparticipatefacp: item.isparticipatefacp,
            survey_id: item.survey,
            notes: item.notes,
            fbcontact_diseaseid: diseaseId,
            fbcontact_countryid: countryId,
            lk_contactstatusid: statusId,
            lk_contacttypeid: typeId,
          }).then(function (rs) {
            if (i < object.length - 2) createData(i + 1, object)
            else {
              **In else case, i want to return value, i'm using resolve(true) or return true but bold of them not work**
            }
          });
        })
      })
    })
  })
})


}

以下是我使用createDate函数的地方:

createData(0, json).then(function(rs) {
  console.log(rs)
  **It not console anything because I think createData not return or resolve anything**
})

最佳答案

您需要链接您的诺言,每个then应在其中的return诺言。另外,请避免使用explicit construction

var createData = function (i, object) {
  var item = object[i]
  var desease = handleDiease(item.disease); // make all requests
  var country = handleCountry(item.country); // concurrently, no need to wait
  var stat = handleStatus(lodash.capitalize(item['status(no/failed attempt/yes/friend)']));
  var type = handleType(lodash.capitalize(item["type(o/p)"]))
  // join aggregates several promises, notice the `return` here.
  return Promise.join(desease, country, stat, type,
         function(deseaseId, countryId, statusId, typeId) {
    return ContactBLL.create({ // this needs a `return` too
      name: item.name,
      organisation: item.organisation,
      email: item.email,
      phonenumbers: item.phone,
      facebook_url: item.facebook_url,
      contactdate: item.date,
      da_name: item.donation_affiliate_name,
      da_url: item.donation_affiliate_url,
      article_url: item.article_url,
      //isparticipatefacp: item.isparticipatefacp,
      survey_id: item.survey,
      notes: item.notes,
      fbcontact_diseaseid: diseaseId,
      fbcontact_countryid: countryId,
      lk_contactstatusid: statusId,
      lk_contacttypeid: typeId,
    });
  })
  .then(function (rs) { // chain the promise
      if (i < rs.length - 2) return createData(i + 1, rs);
      else return true;
  });
};

10-06 07:30
查看更多