まず、タイトルには申し訳ありません。 私はNode.js/KOAを、少なくとも基礎については理解していると思っていましたが、今は私がいくつかの基本を欠いていると感じ始めています。コールバックが終了する前にKOA/node.jsの外部関数が応答します
は、次のコードを見てみましょう:
router.put("/",
parse,
async function (ctx, next) {
// do something
await next();
},
async function (ctx, next) {
// do something
await next();
},
async function (ctx, next) {
if (some condition) {
gm(imageBuffer)
.quality(80)
.write(profile_path, async function (err) {
gm(imageBuffer)
.resize(60, 60)
.quality(80)
.write(chat_path,async function (err) {
await next(); // HERE 1
});
});
} else {
await next();
}
// HERE 2
},
async function (ctx, next) {
responses.success(ctx, "Success");
}
);
だから、これはすべてについて何です。 KOAフレームワークに精通している人は、ここで何が起こっているのかをすぐに見ていきます。私の問題の開始/終了箇所は3番目のasync function
です。だから私がここでやろうとしているのは、画像操作(保存)です。 gmはasynchronusですが、コードからわかるように、私は匿名のコールバック関数を使用していますが、達成しようとしているのは、await next(); // HERE 1
で最後にasync function
が呼び出されていることです。
実際に何が起こったのですか(私の理解から)... gmは非同期で開始し、がヒットし、何もないので、関数の終了でKOAはデフォルトの404応答を返します。私はこれがなぜそうであるか、そしてこれを克服する方法を理解できないだけです。 私が実際にやりたいことは、コールバックが終了するときです。await next(); // HERE 1
が呼び出され、私は成功応答を返すことができます。 await next(); // HERE 1
もちろん、KOAは既に404で応答しているので、最終的には遅くなります。
ここで何が起こっているのかを説明できる人がいれば、ありがとうございます。
これはまさに私が探していたものです。 ありがとうございます。 – repca