在koa2使用了其他模块,是异步的方法,把他用promise包装了一下,结果出了问题
import Koa from "koa";
import Router from "koa-router";
import request from "request";
import supertest from "supertest";
const app = new Koa();
const router = new Router();
const client = supertest.agent(app.listen(3000));
router
.get("/send", async (ctx, next)=> {
let params = {...}
let aa = await Prequest(params);
console.log(aa);//不打印
ctx.status = 200;
})
app
.use(router.routes())
.use(router.allowedMethods());
//测试错误 超时了
describe("test", function () {
this.timeout(10000);
it("send", function (done) {
client
.get('/send')
.expect(200,done)
});
})
function Prequest(params) {
return new Promise(function (resolve, reject) {
request(params, function (error, response, body){
if (error || !body || body.code != 1) {
reject(error);
}
resolve(body);//并没有resolve出去
})
});
}
巴扎黑2017-04-17 14:37:15
koa
沒用過,一直覺得這種古怪的利用generator
做中間件的手段太過“引人入勝”,實在不敢冒用。 (可能我太low了)
首先,(由於不懂koa
),不清楚如下設定status
的方法是否正確:
ctx.status = 200;
其次,測驗可以這麼改改試試:
describe("test", function () {
this.timeout(10000);
it("send", function (done) {
client
.get('/send')
.expect(200)
.end(function(err, res) {
if (err) return done(err);
done();
});
});
})
補充:
我看koa-router 7.x
配合koa 2.x
才支援async/await
文法,你確定版本都用對了吧?
對照官方的例子來看看吧supports promises for async/await
最後,真心沒用過這怪玩意,你自己多找文件吧
再補充:
的確,如@wusisu 所說,你的request
寫的有點問題,應該改改:
function Prequest(params) {
return new Promise(function (resolve, reject) {
request(params, function (error, response, body){
if (error || !body || body.code != 1) {
return reject(error);//这里一定要return出去
}
resolve(body);
})
});
}
巴扎黑2017-04-17 14:37:15
我是koa@2的老司機了。
不過問題不在koa上,而是那個Promise沒有回來。
我也一樣沒有看懂request這個函數的使用,建議在request的回呼中,印一下看看。