2015-10-07 96 views
2

我的代码存在一些问题。我需要在承诺中返回一个值,但不知道如何达到目标。我是新手在ECS6如何在promise中返回值javascript

以下是我的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** 
}) 

回答

3

您需要链中的承诺,每个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; 
    }); 
}; 
+0

感谢您的帮助。但是当我使用这个函数时它可能不起作用:var abc = createDate(0,json)=> console.log(abc)= null。你能支持我使用吗?这个函数的目的是从csv文件插入日期,插入每一行然后如果检查数组的条件,如果还有其他回调函数:) –