node.js - Promise改写的异步回调函数为何测试超时?
ringa_lee
ringa_lee 2017-04-17 14:35:15
0
2
899

在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出去
        })
    });
}
ringa_lee
ringa_lee

ringa_lee

全員に返信(2)
巴扎黑

koa 私はこれを使用したことがありません。generator を使用してミドルウェアを作成するこの奇妙な方法は、あまりにも「魅力的」すぎると常々感じており、実際には使用する勇気がありません。 (私が低すぎるのかもしれません)

まず、(koaが理解できないので)、次のstatusの設定方法が正しいのか分かりません。

リーリー

次に、次のようにテストを変更してみてください:

リーリー

補足:

koa-router 7.xkoa 2.x と連携して async/await 構文をサポートしているようですが、正しいバージョンを使用していますか?

公式の例が async/await の Promise をサポートしていることを確認してください

最後に、私はこの奇妙なものを使ったことはありません。詳しいドキュメントは自分で探してください

再度追加:

確かに、@wusisu が言ったように、request の記述には何か問題があるため、変更する必要があります:

リーリー
いいねを押す +0
巴扎黑

私はkoa@2のベテランドライバーです。
しかし、問題は koa にあるのではなく、Promise が返されないことにあります。

リクエスト関数の使い方もわかりません。リクエストのコールバックで出力することをお勧めします。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート