2017-11-29 5 views
0

私はMongoDBを私のアプリケーションのバッキングストアとして提供しています。データベース内のデータに変更されていないと私は応答としてnullを取得 - findByIdが正常に動作しているが、save()は何もしませMongoDBは変更を保存しません

updateEmployee(root, args) { 
    return models.Employee.findById(args.input.id) 
    .then(employee => { 
     employee = Object.assign(employee, args.input) 
     employee.save() 
    }) 
    .then(response => response) 
}, 

は:以下のように、そこにupdateメソッドを持っています。

+0

実際のコンテキストは何ですか?マングース? –

+1

あなたの 'save'呼び出しから約束を返したいと思っています:' return employee.save(); '。そうすれば、2回目の 'then'呼び出しは、' findById'からの元の呼び出しではなく、約束通りに動作します。試してみてください。 – JohnnyHK

答えて

1

これは、Mongoose(およびNode一般)が返す最初の引数はデータではなく、エラー(存在する場合)です。

いいえ、それはうまくいきません:)あなたが現在のコードでconsole.log(employee)を使用すると、操作が正常に完了したため、エラーがないため、undefinedが記録されます。あなたが書くべき

.then((error, employee) => { console.log(employee) }

これは、エラーを管理するために、開発者を奨励することです。

EDIT:申し訳ありませんが、thenexecが混在しています。 execアプローチを試してみてください。

.exec((error, employee) => { console.log(employee) }

+0

これは正しくありません。 ['then'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then)は、解決用と拒否用(オプション)の2つのコールバックパラメータをとります。解決コールバックは、エラーではなくクエリの成功した結果のみを受け取ります。 'exec'はあなたが言っていることをしますが、' then'は行いません。 – JohnnyHK

+0

ああそうです、私は 'then'と' exec'を混在させました。それを修正しました、ありがとう! –

関連する問題