首页 > 解决方案 > 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从未正确设置。

标签: javascriptnode.jsasync-awaites6-promisesuperagent

解决方案


不要使用 'end' 语法,这是用于回调:

const response = await request.post(...)
  .expect(200)
const {body: {token}} = response
return token

基本上它应该看起来像同步代码


推荐阅读