javascript - 从 promise 中返回一个字符串值

标签 javascript node.js node-request

在下面的代码中,您看到我发出了一个 HTTP 请求。我解析响应并取出一个“ token ”(一个字符串)。我想返回该 token ,以便将其值分配给 foo。

foo = request.post(
        {
            url: 'http://10.211.55.4/api/2.0/auth/signin',
            body: reqLogin.toString(),
            headers: {'Content-Type': 'text/xml'}
        },
        function(err, response, body) {
            if(err) {
                console.log(err);
                process.exit(1);
            } 
            else {
                parseString(body, function (err, result) {
                    tokencontainer = (result.tsResponse.credentials[0]);
                    token = tokencontainer.$.token;
                    console.log('Logged in, token is ', token);
                    return token;
                });
            }           
        }
    );

当我运行这段代码时,foo 的对象类型是 Request。我可以以某种方式将整个请求转换为“字符串”,这样我就不会将请求对象分配给 foo 吗?我只是想将“ token ”值分配给变量。

谢谢!

最佳答案

如果您使用 Mikeal 的请求库,.post() 方法(或任何其他方法)不会返回 promise (即使返回,您也无法分配 这样(而不是 promise )。

因此,您的选择是:

  1. 将使用“foo”的逻辑移到一个单独的函数中,并通过回调调用它。
  2. 使用辅助库之一(如 Q)将 .post() 包装在一个 promise 中。
  3. 找到另一个支持 promises 的 HTTP 库。

(注意:我写了上面的代码,但没有运行它,所以它可能无法按原样运行。但它给了你一个想法)

选项 1 可能如下所示:

var logicUsingFoo = function(foo) {
  // do stuff with foo here
};

request.post({...}, function (err, response, body) {
  // ...
  logicUsingFoo(token);
});

// Here, you can't really use foo, because request.post() has not yet
// finished. In Javascript, there's no way to pause program execution.
// You need to either use callbacks, or promises.

选项 2

类似于(使用 Q library ):

var promisePost = function(params) {
    var q = Q.defer();

    request.post(params, function(err, response, body) {
      if (err) {
          q.reject(err);
      } else {
          q.resolve(body);
      }
    };

    return q.promise;
}

然后使用它:

promisePost({url: ..., headers: ...}).then(function (body) {
  // Do stuff with body, obtain token etc.
}, function (err) {
  // Handle error
});

选项 3

例如,您可以使用 Q-IO作者 Kris Kowal,正是他为 promises 创建了广泛使用的 Q 库。

关于javascript - 从 promise 中返回一个字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940776/

相关文章:

javascript - 为什么创建对象时出现意外 token 错误?

javascript - 解析从 Node 服务器 Spotify 返回的 json

javascript - Ruby 到 Javascript => 令人头疼的日期计算

node.js - 将选项传递给 Sequelize Hook 不起作用

具有自动 ntlm/kerberos 身份验证的 node.js HTTP 请求

javascript - 等待所有nodeJS请求完成并给它们添加一个小延迟

javascript - Three.js 阴影不显示

javascript - 通过 javascript 渲染 html

javascript - 如何在 google map api v3 中使用 if 条件检查两个 LatLng 值?

javascript - Node.js xml2js 解析器未定义