【发布时间】:2023-03-17 03:49:01
【问题描述】:
基本上,当我调用我的函数 getToken() 时,它应该从 api 返回承载 + 令牌。
我的问题是由于发生了异步过程,数据没有立即返回;所以在阅读以下资源时:
我的理解是,我需要以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
不幸的是,当我在 node repel 中运行我的程序时,它什么也没返回,而且它似乎没有等待;当然,当我记录我的回复“console.log(body)”时,这似乎意味着我兑现承诺的方式一定有问题;我对承诺之类的东西很陌生。
可以与第二双眼睛一起使用。
【问题讨论】:
-
你怎么打电话给
getToken()?当您正确调用它时,您是否使用.then()?忘记这样的超时,它们不是你需要的,而且非常脆弱。 -
目的是使用 getToken() 来返回不记名令牌,以便我可以发出其他请求来测试 API。我认为超时可能不是最好的方法。
-
您绝对不应该依赖 setTimeout,当收到响应时,promise 应该会解决(然后调用)。我假设这是针对节点的,否则我会质疑您为什么不使用 whatwg-fetch?
-
因为理论上您的代码看起来应该可以工作(尽管有 3 秒的延迟),您能否发布您尝试调用该函数的部分?
-
你忘记了
return的承诺,即return request(options)
标签: javascript authentication promise httprequest