在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
を使用してミドルウェアを作成するこの奇妙な方法は、あまりにも「魅力的」すぎると常々感じており、実際には使用する勇気がありません。 (私が低すぎるのかもしれません)
まず、(koa
が理解できないので)、次のstatus
の設定方法が正しいのか分かりません。
次に、次のようにテストを変更してみてください:
リーリー補足:
koa-router 7.x
は koa 2.x
と連携して async/await
構文をサポートしているようですが、正しいバージョンを使用していますか?
公式の例が async/await の Promise をサポートしていることを確認してください
最後に、私はこの奇妙なものを使ったことはありません。詳しいドキュメントは自分で探してください
再度追加:
確かに、@wusisu が言ったように、request
の記述には何か問題があるため、変更する必要があります:
巴扎黑2017-04-17 14:37:15
私はkoa@2のベテランドライバーです。
しかし、問題は koa にあるのではなく、Promise が返されないことにあります。
リクエスト関数の使い方もわかりません。リクエストのコールバックで出力することをお勧めします。