Javascript:承诺立即返回,而不是等待异步过程完成

时间:2018-05-01 09:29:16

标签: javascript authentication promise httprequest

基本上当我调用我的函数getToken()时,它应该从api返回bearer + token。

我遇到的问题是由于发生异步过程,数据不会立即返回;所以在阅读以下资源时:

我的理解是我需要以promise的形式返回我的响应,并设置超时以确保返回帐户服务器以响应的形式发回请求所花费的时间。

var request = require('request-promise');
var time = require('timers');
class Auth {
 getToken() {
   let options = {
     method: 'POST',
     uri: 'https://example.com/service/ep',
     body: {
       username: 'someUser',
       password: 'somePass'
     },
     json: true
   }
  request(options)
    .then(function (body) {
      // console.log(body)
      return new Promise((resolve) => {
        time.setTimeout(() => {
          resolve(body)
        },3000)
    });
  })
  .catch(function (err) {
    return err
  });
 }
}
module.exports = new Auth

不幸的是,当我在节点排斥中运行我的程序时,它什么也没有返回,它似乎没有等待;当然,当我记录我的回复#console.log(正文)'时,似乎意味着我如何回复我的承诺有问题;我对承诺的喜欢很新。

可以用第二双眼睛。

1 个答案:

答案 0 :(得分:3)

  

我的理解是我需要以promise的形式返回我的响应,并设置超时以确保返回帐户服务器以响应的形式发回请求所花费的时间。

没有。你需要返回一个promise(request已经给你一个)然后你返回承诺的代码需要期望一个promise(并在其上调用then()来获取数据)。

您不需要任何时间延迟。

var request = require('request-promise');
var time = require('timers');
class Auth {
 getToken() {
   let options = {
     method: 'POST',
     uri: 'https://example.com/service/ep',
     body: {
       username: 'someUser',
       password: 'somePass'
     },
     json: true
   }
  return request(options);
 }
}
module.exports = new Auth
const auth = require("Auth");
auth.getToken().then(function (data) {
    console.log(data);
});