0
ノード6.9でネイティブな約定を使って非同期コードを書いています。古い約束が完了する前に、新しい約束が発砲している競争状態に気付いています。現在実行中の約束のIDを公開する
私はデバッグをプリントアウトしています。これは、あるプロミスの出力が他のプロンプトの出力とインターリーブされているため読みにくいです。どの関数が現在実行中であるかを識別する何らかの「id」を持つと便利です。例えば
:
function doWork() {
new Promise((resolve, reject) => {
console.log("queue ID", someId())
// long-running processing happens
})
}
doWork()
-> queue ID 1
doWork()
-> queue ID 2
注:私はprocess.idを探していませんよ。私が理解しているように、ノードは単一のプロセスで実行され、非同期I/Oがその中で発生するため、process.idの出力は役に立たない。
あなたはちょうどあなたが 'I = 0'で始まり、ちょうどそれぞれの約束のために増分する場合は、簡単なカウンタがすべき、あなた自身作ることができます。おそらくあなたが探しているのは、あなたの関数内で約束を待ち行列に入れる方法ですが、 'new Promise'を複数回呼び出すだけでは、競合状態が発生しないはずです。 – adeneo
問題を引き起こす2つの約束の間の競争状態は、正常に連鎖されておらず、他の仕上げが完了するまで実行されないということを意味します。あなたが求めていることは、約束のインフラに組み込まれていない。問題に関わる約束を知っている可能性が高いので、あなたがしようとしていることのコードを示して、問題の内容を説明すれば、本当の問題を手助けできるはずです。その代わりに、特定のデバッグ手法について尋ねました。私たちはむしろ本当の問題を助けたいと思っています。 – jfriend00