首先,我爲標題感到抱歉,我不介意更好的東西。 我以爲我理解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框架的人會立即看到這裏發生了什麼。我的問題開始/結束位於第三個async function
。所以我想在這裏做的是一些圖像處理(保存)。 gm是asynchronus,但正如您從代碼中看到的,我使用的是匿名回調函數,而我試圖實現的是當gm通過await next(); // HERE 1
完成時最後一個async function
被調用。
但真正發生的是(從我的理解)...... gm異步啓動,並且被命中,並且由於沒有任何功能結束,KOA返回默認的404響應。我簡直不明白爲什麼這是如此以及如何克服這一點。 我真正想要發生的是當回調完成時await next(); // HERE 1
被調用,我可以返回成功響應。 await next(); // HERE 1
當然被稱爲(最終),但太遲了,因爲KOA已經迴應了404個。
如果有人能夠並願意解釋這裏發生了什麼,謝謝。
這正是我所期待的。 謝謝你的幫助。 – repca