ecmascript-6 - promise es6 和 superagent

标签 ecmascript-6 superagent es6-promise

我正在尝试将 es6 promise 与 superagent 一起使用。我正在尝试调用一个包含 super 代理请求的函数。

Request.post(buildReq).then(res => {
 if (res.ok) {//process res}
});

这是包装 super 代理的函数
  static post(params) {
    superagent
      .post(params.url)
      .send(params.payload)
      .set('Accept', 'application/json')
      .end((error, res) => {
        return this.Promise.resolve(res);
      })
      .bind(this);
  }

我收到一个错误
enter code here Uncaught TypeError: Cannot read property 'then' of undefined
当我将函数的返回值更改为
static post(params) {
    return Promise.resolve(superagent
      .post(params.url)
      .auth(params.auth.username, params.auth.password)
      .send(params.payload)
      .set('Accept', 'application/json')
      .end((error, res) => {
        return this.Promise.resolve(res);
      })
    );
  }

看起来数据是在浏览器的开发工具中返回的,但我无法在 .then 函数中访问它。我怎样才能得到 promise 的回应。

最佳答案

您从 end 返回什么并不重要方法回调,因为它在您获得响应时异步执行,并且没有使用回调执行的结果。看 herehere在源代码中。 end方法返回 this ,所以在你的第二个例子中你正在解析 superagent没有回应。要获得回复您的 post方法必须如下所示:

static post(params) {
    return new Promise((resolve, reject) => {
        superagent
            .post(params.url)
            .auth(params.auth.username, params.auth.password)
            .send(params.payload)
            .set('Accept', 'application/json')
            .end((error, res) => {
                error ? reject(error) : resolve(res);
            });
    });
}

关于ecmascript-6 - promise es6 和 superagent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967000/

相关文章:

javascript - Symbol.iterator 不是函数

node.js - 如何使用 node.js superagent 发布 multipart/form-data

javascript - 如何使用 Promise.all 获取一组 URL?

javascript - 从 fetch -> promise -> response 获取数据

javascript - `` 模板语法-优雅降级

Javascript 扩展继承

javascript - 比较两个对象数组与键,如果没有找到,则将其添加到数组中

node.js - 将spawn进程的STDOUT通过管道传输到superagent上传中

javascript - 使用 ES6 Promises 惯用地处理前置条件