Promise改写的异步回调函数为何测试超时?

发布于 2022-09-03 08:47:19 字数 1034 浏览 27 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

终止放荡 2022-09-10 08:47:19

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);
        })
    });
}
尬尬 2022-09-10 08:47:19

我是koa@2的老司机了。
不过问题不在koa上,而是那个Promise没有返回。

我也同样没有看懂request这个函数的使用,建议在request的回调中,打印一下看看。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文