2015-09-28 44 views
0

在Parse中保存新用户时,虽然用户保存正确,但保存后不会返回新用户,因此代码错误为console.log("userResult id " + userResult.id);。如果用户已经存在,则save函数会正确返回该id。这是一个与解析错误还是我错过了什么?解析新用户保存不会返回新的ID

return userQuery 
     .first(function (userResult) { 
      if (!helpers.isDefined(userResult)) { 
       userResult = new Parse.User(); 
       userResult.set("username", helpers.phoneToUsername(phoneNumber)); 
       userResult.set("password", helpers.generatePassword(phoneNumber)); 
       userResult.set("displayName", displayName); 
      } 
      userResult.set("location", location); 
      userResult.set("smsVerified", false); 
      return userResult.save() 
     }) 
     .then(function (userResult) { 
      console.log("userResult id " + userResult.id); <-- ERROR HERE 
      user = userResult; 
      return Verification.createSmsVerification(userResult); 
     })... 

错误:

Result: TypeError: Cannot read property 'id' of undefined 
    var userQuery = new Parse.Query(Parse.User); 
     userQuery.equalTo("username", helpers.phoneToUsername(phoneNumber)); 

它作为如果用户正在保存然后then()后回调,但这不应该是这样的。

回答

0

一段时间后,在这黑暗中摆弄周围,我发现这个问题初始代码在first()回调,而不是thenable内。将顶端代码行从first(function()...更改为first().then(function()已解决该问题。

return userQuery.first() 
     .then(function (userResult) { 
      if (!helpers.isDefined(userResult)) { 
       userResult = new Parse.User(); 
       userResult.set("username", helpers.phoneToUsername(phoneNumber)); 
       userResult.set("password", helpers.generatePassword(phoneNumber)); 
       userResult.set("displayName", displayName); 
      } 
      userResult.set("location", location); 
      userResult.set("smsVerified", false); 
      return userResult.save() 
     }) 
     .then(function (userResult) { 
      console.log("userResult id " + userResult.id); <-- ERROR HERE 
      user = userResult; 
      return Verification.createSmsVerification(userResult); 
     })... 
0

试图返回它:

return userQuery 
     .first(function (userResult) { 
      if (!helpers.isDefined(userResult)) { 
       userResult = new Parse.User(); 
       userResult.set("username", helpers.phoneToUsername(phoneNumber)); 
       userResult.set("password", helpers.generatePassword(phoneNumber)); 
       userResult.set("displayName", displayName); 
      } 
      userResult.set("location", location); 
      userResult.set("smsVerified", false); 
      return userResult.save() 
     }) 
     .then(function (userResult) { 
      console.log("userResult id " + userResult.id); <-- ERROR HERE 
      user = userResult; 
      return Verification.createSmsVerification(userResult); 
     })... 
+0

非常感谢尼古拉,发现。我实际上拿出了回来测试一个新的场景,并忘记重新加入。虽然你的答案是合理和正确的!我更新了这个问题,我想我也找到了答案。 – JackalopeZero

+0

现在一切按预期工作? –

+0

不符合您发布的代码。这是在我的回答中解释:) – JackalopeZero