1

我正在尝试使用 NodeJS 和请求发出发布请求。我尝试像其他帖子所说的那样使用承诺和异步/等待,但我可以设法完成工作。

const express = require('express');
const bodyParser = require('body-parser');
var request = require("request");

const app = express();

app.use(bodyParser.json());

var token = '';
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;

function postRequest(options) {
    request(options, function (error, response, body) {
        if (error) throw new Error(error);

        token = (JSON.parse(body)).access_token;
        console.log(token + 'tet');
        return (token);
    });
}

async function requestToken() {
    var options = {
        method: 'POST',
        url: 'https://simplivity@xxxx/api/oauth/token',
        headers: { 'Content-Type': 'application/json' },
        formData:
        {
            grant_type: 'password',
            username: 'administrator@vsphere.local',
            password: 'xxxx'
        }
    };
    try {
        var test = await postRequest(options)
        return (test);
    } catch (error) {
        console.error(error);
    }
}

var test = requestToken();
console.log(test + 'TOT');

这是答案:

[object Promise]TOT
00bd0beb-8967-4534-8c63-2e5d0d6876d4tet

这应该是相反的。

感谢您的帮助。

4

2 回答 2

1
(async () => {
  var test = await requestToken();
  console.log(test + 'TOT');
})();

虽然不是很整洁,但这样的东西应该可以工作。

更好的:

requestToken()
.then(response => {
  console.log(response);
});
于 2019-06-19T09:55:36.010 回答
1

你需要回报一个承诺。

将您更改postRequest为:

function postRequest(options) {
    return new Promise(function(resolve, reject) {
        request(options, function (error, response, body) {
            if (error) throw new Error(error);

            token = (JSON.parse(body)).access_token;
            console.log(token + 'tet');
            resolve(token);
        });
    });  
}
于 2019-06-19T09:54:15.230 回答