2016-06-26 2 views
0

私はこの約束のコンセプトでかなり新しいです。私は確信していないが、これを見て、私はコールバックとして約束を使用していると私は約束地獄で終わると思う!プロムスとモンゴースのベストプラクティス

私はこの機能を利用してMongoUserデータベースからユーザオブジェクトを取得し、更新して再度保存します。ここに私のコードスニペットがあります:

var changePassword = function(data){ 
     return new Promise(function(fulfill, reject){ 
     MongoUser.findOne({username: data.username}).exec() 
      .then(function(mongoUser){ 
      //mongoUser = new MongoUser(); 
      //mongoUser.username = data.username; 
      mongoUser.password = data.password; 
      mongoUser.save().then(function(){ 
       fulfill(data); 
      }).catch(function(error){ 
       log.error("MongoDB Failed in updating data", {"error": error}); 
       reject(error); 
      }); 
      }) 
      .catch(function(error){ 
      log.error("MongoDB Failed in updating data", {"error": error}); 
      reject(error); 
      }); 
     }); 
}; 

任意のアイデア新しいものを作成せずに返された約束をどのように使用するのですか?

+0

引数と同じデータが返されていますか?それは意図的ですか? –

+1

'fulfull(data)'は 'return data'と同じで、' reject(error) 'は' throw error'だけだと思う​​ので、それ以降はラッピングの約束を取り除くことができます。 – elclanrs

+1

余分な約束を加える必要はなく、Mongoosも約束を返す –

答えて

4

マングースすでにsupports promisesので、私はあなたがこれにあなたのコードを書き換えることができると思います。

var changePassword = function(data) { 
    return MongoUser.findOne({username: data.username}).then(function(mongoUser) { 
    mongoUser = new MongoUser(); 
    mongoUser.username = data.username; 
    mongoUser.password = data.password; 
    return mongoUser.save(); 
    }).catch(function(error){ 
    log.error("MongoDB Failed in updating data", {"error": error}); 
    throw error; 
    }); 
}; 

(私はなぜあなたが既に存在していることがあり、ユーザー作成しているかわからないが)を。

+0

ああ、私の間違い!私は、この大部分の問題を解決する代わりに、更新メソッドを使うべきです。それに気づいてくれてありがとう。 – bersam

1

モンゴースはすでにpromisesをサポートしています。また、私はあなたが現在のユーザーのパスワードを変更する必要がある代わりに、新しい資格情報で新しいユーザーを作成する必要があるとは思わない。また、私は "changePassword"関数を呼び出している間にデータを返しました。

var changePassword = function(data){ 
    return MongoUser.findOne({username: data.username}).exec() 
     .then(function(mongoUser){ 
     mongoUser.username = data.username; 
     mongoUser.password = data.password; 
     return mongoUser.save(); 
     }) 
    .then(function(newSavedData) { 
       return newSavedData; // returns the new saved data 
     }) 
    .catch(function(error){ 
      log.error("MongoDB Failed in updating data", {"error": error}); 
      reject(error); 
     }); 
}; 
+0

ええ、私の悪い、それは間違いでした。ありがとう:) – bersam

関連する問題