2015-07-06 66 views
0

我在寫一個io.js和Koa API,我有一個GET路由,我用它將數據傳遞給API,並立即向用戶返回OK。基本上我不關心GET請求會返回的結果,我只想傳遞數據。這就是爲什麼我想返回「OK」給客戶端,然後他儘快發出GET請求,然後處理請求中的數據。Koa GET立即返回結果給客戶端,然後做一些事情

到目前爲止我的代碼如下:

app.use(route.get("/passData", function*(){ 
    this.body = "OK"; 
    yield doSomeWork(this.query); 
}); 

function *doSomeWork(query){ 
    // do work 
    // the code below should be triggered when the client receives the OK message 
} 

有沒有辦法做到這一點?

+0

如果我刪除''yield'是doSomeWork'沒執行。 –

回答

2

你不想yielddoSomeWork - 這告訴科亞等待,這正是你要做的不是想要。

app.use(route.get("/passData", function*(){ 
    this.body = "OK"; 
    doSomeWork(this.query); // REMOVE YIELD 
}); 

由於doSomeWork現在只是一個普通的老異步函數,它不應該是一個發電機。 (如果你離開*那裏,你會調用發電機,它也絕對沒有什麼以外創建隨後將被扔掉的迭代器。)

function doSomeWork(query){ // REMOVE ASTERISK 
    // do work 
    // the code below should be triggered when the client receives the OK message 
} 
+0

有沒有辦法做到這一點,而不刪除'yield'?在'doSomeWork'函數內部,我使用了一個生成器函數來將數據插入到我的數據庫中,所以如果我不使用yield,它將不起作用,否則我將不得不重寫很多代碼。 –

+1

不太明白。如果你在'doSomeWork'前面加上yield,那麼Koa會等待它完成。根據我的理解你的問題,你不需要這個。如果'doSomeWork'是一個生成器,產生你想按順序執行的promise,然後用'co'調用它。 –

相關問題