2015-09-10 2 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

Вы на самом деле не нужно resolve или reject здесь. Вы можете просто вернуть обещание, данное вам от 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(); 

} 
Смежные вопросы