gpt4 book ai didi

javascript - 如何从Nodejs中的内部函数返回值

转载 作者:行者123 更新时间:2023-12-01 01:02:32 25 4
gpt4 key购买 nike

我有 Nodejs 代码,使用请求库从 url 获取身份验证 token 。

var request = require("request")

const wellish_dev_url = "https://dev.wellish.com"

function get_auth_token(){
const api_end_point = wellish_dev_url + "/api/v1/auth"

var options = {
url: api_end_point,
headers: {"Content-Type": "application/json"},
auth: {
'user': 'admin',
'pass': 'password'}
}

var r = request.get(options, function(error, response, body){
if(!error && response.statusCode==200){
var token = JSON.parse(body)
var auth_token = token["data"][0]["accessToken"]
// console.log(auth_token)
return auth_token
}
else{
console.log("Code : " + response.statusCode)
console.log("error : " + error)
console.log('body : ' + body)
}
})
}

// get_auth_token()
var auth_token_new = get_auth_token()
console.log(auth_token_new)

我想返回auth_token以用作另一个函数中的参数。但是,它显示未定义。

我在网上查找使用cb,但是,我不知道它是如何工作的。我真的想在不使用cb的情况下返回该值。有什么帮助吗?

最佳答案

只有响应从服务器返回后,您的回调才会执行。到那时,你的函数就已经被执行了。

由于您的代码是异步的,因此您需要一种仅在从服务器返回响应时才返回响应的方法。

您可以使用 Promise为了那个任务。

这里是一个关于如何在您的特定情况下解决该问题的示例。使用 Promise 构造函数返回一个 Promise,当调用内部回调时,该 Promise 会解析/拒绝。

然后您只需将 .then() 链接到您的函数调用即可获取 token :

...

function get_auth_token() {
const api_end_point = ...
const options = ...

return new Promise((resolve, reject) => {
var r = request.get(options, (error, response, body) => {
if (!error && response.statusCode == 200){
var token = JSON.parse(body)
var auth_token = token["data"][0]["accessToken"]
resolve(auth_token)
} else {
console.log("Code : " + response.statusCode)
console.log("error : " + error)
console.log('body : ' + body)
reject(error)
}
})
});
}

get_auth_token()
.then(token => console.log(token))
.catch(error => console.error(error));

您还可以像这样使用 await 从 Promise 获取值,只需确保您在标记为 async 的函数中使用 await >:

async function parent_function() {
function get_auth_token() { ... }

try {
const token = await get_auth_token();
console.log(token);
} catch (error) {
console.log(error);
}
}

关于javascript - 如何从Nodejs中的内部函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55928691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com