2015-09-10 82 views
2

恐怕我所做的是完全錯誤的。可以從承諾鏈內解決嗎?

是否可以解決()或拒絕()從承諾鏈IN承諾。

// Insert a new user by details into database 
insert: function(username, name, email, gender, birthday, other) { 
    return new Promise(function(resolve, reject) { 

     // Base structure 
     var new_user = { 
      username: username, 
      name: name, 
      email: email, 
      gender: gender, 
      birthday: birthday 
     }; 

     // Merge other data with base structure 
     if(other != undefined) { 
      new_user = _.merge(new_user, other); 
     } 

     var new_user_model = new UserModel(new_user); 
     new_user_model.saveAsync(function(user) { 
      return resolve(user); // Safe to resolve from inside a promise? 
     }); 

     // OR... should I do it like this? 
     var user = new_user_model.saveAsync(function(user) { 
      return user; 
     }); 
     return resolve(user); 
    }); 
} 
+0

安全嗎?是。錯誤?是。 – Bergi

回答

6

你其實並不需要resolvereject這裏。您可以退還new_user_model.saveAsync給予您的承諾:無需將其包裝在新的包裝中。嘗試以下操作。

// Insert a new user by details into database 
insert: function(username, name, email, gender, birthday, other) { 

    // Base structure 
    var new_user = { 
     username: username, 
     name: name, 
     email: email, 
     gender: gender, 
     birthday: birthday 
    }; 

    // Merge other data with base structure 
    if(other != undefined) { 
     new_user = _.merge(new_user, other); 
    } 

    var new_user_model = new UserModel(new_user); 
    return new_user_model.saveAsync(); 

}