函数将从javascript post / get返回null
JavaScript新手,刚开始阅读关于Callback和Promise的内容。 我只是不明白“等待”的概念,直到我有来自POST / GET请求的值。
更具体地说,为什么不能这样工作?
var token = null;
/
/ var options = {headers, form, etc}
/
function getToken() {
request(options)
.then(function (parsedBody) {
this.token = parsedBody
})
.catch(function (err) {
console.log('POST-Error')
})
return token
}
console.log(getToken())
我在nodejs中使用'request-promise'库。 据我所知,当请求被调用时,那么令牌变量将被设置,因为它的承诺,对吧?
这很复杂,我不怪你,你感到困惑。 每个新加入Node的人似乎都对此感到困惑。
你的问题在于变量会被正确地更改 - 只是在console.log()
运行时还没有。
当一个函数返回一个承诺时,这意味着将来会发生什么 - 可能是在一瞬间,也许以后,但还没有在该函数返回承诺时。
然后你可以添加履行和拒绝处理程序的承诺 - 这些处理程序将在承诺真正解决时(即有一些数据返回的请求,或有错误)被调用。
所以,你不能写:
console.log(getToken());
你可以写的是:
getToken()
.then(data => console.log('Data:', data))
.catch(error => console.log('Error:', error));
但是,只有当你真的从你的函数中返回承诺时:
function getToken() {
let promise = request(options);
return promise;
}
现在,您可以使用async
关键字并执行如下操作:
async function getToken() {
let data = await request(options);
return data;
}
但是这个函数不返回data
- 它像前面的例子一样返回一个promise。
记住一件事,你不能从你的功能中返回任何尚不可用的值。 如果您希望在获得某件东西之前返还某些东西,则只能退还承诺。 而且每一个异步函数 - 无论是async function
,显式返回一个promise还是一个接受回调的函数 - 都将在异步操作完成之前返回,而不会阻塞该线程。
欲了解更多详情,请参阅以下答案: