[英]How to return the value from inner function in Nodejs
我有使用請求庫的Node.js代碼來從URL獲取身份驗證令牌。
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()
到函數調用即可獲取令牌:
...
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.