javascript - superagent / supertest with async / await
问题描述
目标是正确设置变量auth
以供进一步使用,因此我想重构函数 loginUser:
function loginUser(user, request, auth) {
return function(done) {
request
.post('/users/login')
.send(credentials)
.expect(200)
.end(onResponse);
function onResponse(err, res) {
auth.token = res.body.token;
return done();
}
};
}
loginUser(user, request, auth)(function() {
request.get(testUrl)
.set('Authorization', `bearer ${auth.token}`)
.expect(200, done);
});
像这样使用 async / await (没有回调):
auth = await loginUser(user, request);
request.get(testUrl)
.set('Authorization', `bearer ${auth.token}`)
.expect(200, done);
但是我正在努力正确地返回/设置(我是作为参数传递还是作为返回值auth
传递都没有关系)。auth
我尝试的是这样的东西:
async function loginUser(user, request) {
let auth;
await request
.post('/users/login')
.send(credentials)
.expect(200)
.end(onResponse);
function onResponse(err, res) {
auth.token = res.body.token;
}
return auth;
}
但auth
从未正确设置。
解决方案
不要使用 'end' 语法,这是用于回调:
const response = await request.post(...)
.expect(200)
const {body: {token}} = response
return token
基本上它应该看起来像同步代码
推荐阅读
- php - 使用 php ffmpeg 库对视频进行转码
- datatables - 按日期列对数据表进行排序
- python-3.x - 如何在 Python 3 中找到模块的导入名称
- ios - 如何将 IBOutlet 标记为可用于特定 iOS 版本
- android - 在 GraphView 中显示高于数据点的数据点值
- c# - Xamarin 数据模板与后面的代码绑定不起作用
- unity3d - Unity CanvasBatchRenderers 随时间增长
- machine-learning - 如何结合光谱聚类的分裂运行以获得巨大的亲和矩阵
- php - 从不同的数组php中删除重复的值
- r - 尝试通过从数据库传递 URL 来抓取数据但抛出错误