私は、Mongooseの約束のための標準的な習慣はexec()を使用することであることを認識していますが、以下の作業(または少なくとも現れます)があります。私はexec
を使用することに反対ではない、私はちょうどこれを学ぶために少しを探っています。次マングース動作でMongooseは、コールバックで渡されたコールが完了した後に `then`コールを実行しますか?
:
let id:string;
SomeDocument.remove({}, (err) => { //clears collection
someDoc = new SomeDocument(data); //creates a new doc for the collection. Id is created here from what I understand.
someDoc.save((err, result) => { doSomething(); });//doSomething gets called sometime in the future.
id = someDoc._id.toString();
}).then((result) => {doSomethingElse(id)});//This works - but will doSomethingElse always be called after the first annonymous callback completes?
私はdoSomething()
はいくつかの将来の時点で呼び出されますことを取得しない - 何の問題。問題は、then
コールのdoSomethingElse
が呼び出される前に、削除コールの最初のコールバックが完了するかどうかです。 id
にはdoSomethingElse
が正しく入力されているようですが、タイミングのばかつきではないことを確認したいと思います。つまり、then
より前に完了したコールバックに頼ることができますか?私は標準ES6の約束事(NodeJS.Global.Promise)を使用しています。
代わりに、削除操作が完了した後で、コールバックが完了する前に(おそらく - 確認したいが)、then
が呼び出される可能性があります。
私がこれを間違って説明している場合はまっすぐに設定してください。
よく、そのコールバックを保存するので、 'id = someDoc._id.toString()'行が実行された後で実際に完了する保存操作が完了した後に呼び出されます。 – WillyC
申し訳ありません - それはポストの単なるエラーでした。 doSomethingElseはanon関数の中から呼び出されています。 私は実際にこれを実行すると、 'doSomethingElse(id)'の前に 'id = someDoc._id.toString()'という行が呼び出されているので、idが正しくdoSomethingに代入されていることがわかります。だから少なくとも、コールバックを取り除いた後に実行される可能性があります。これは確実に起こるかどうかです(私の場合はそうですが、それはちょっとばかりかもしれません)。 – WillyC
母 - はい、そうです。私はちょうど私の実際のコードを掲示するべきだったが、それはちょっと乱雑だった。明らかにそれを「単純化」しようとしているとき、私はそれを実質的にねじ込みました。私はそれを修正した。ありがとう!しかし、最終的には、関数を 'then'と呼ぶ操作にコールバックとして渡した後に、' then'関数が常に実行されるようになります。特に - 最初に実行される - コールバックまたは 'then'? – WillyC