[英]Variable global defined in a function is showing undefined when called outside the function
我已經通過使用let定義了一個函數,然后創建了一個函數。 此函數將發布請求發送到api,並以json格式獲取數據。 在此函數中,我使用了一個變量並將其設置為等於響應的值。
當我使用此功能時,一切正常。 當我在函數外使用此變量時,我得到的值不確定''
下面是我的代碼
var request = require("request");
let conkey = 'Some Value', //varialble for consumer_key
consec = 'Some Value', //varialble for consumer_secret
tkn = 'Some Value', //varialble for token
tknsec = 'Some Value',
value;
function myFunction() {
request.post('someurl', {
oauth: {
consumer_key: conkey,
consumer_secret: consec,
token: tkn,
token_secret: tknsec
},body: {"skillIds": [some value]
},json: true}, function (err, res, body) {
if (err) throw new Error(err);
value = body.sonething.something;
console.log(value); ////THIS WORKS FINE
});
};
myFunction();
console.log(value); ////This prints Undefined
發生這種情況是因為request.post
是異步操作。 這意味着它將最終但不是立即完成。 這就是為什么request.post
接受一個函數(稱為回調函數)的原因。
function (err, res, body) { ... }
僅在請求完成時被調用。
讓我們按順序遍歷您的代碼...它將首先:
1-創建變量。
2-定義myFunction
3-調用myFunction
。 myFunction
將在request.post
調用。 但是request.post
是異步的。 這意味着它將在得到結果之前立即返回。 myFunction
現在退出。
4- console.log(value);
現在被調用,但是在這個時間點, value
是不確定的。
5-請求完成后, function (err, res, body)
(在request.post
調用中定義)將執行
value = body.sonething.something;
console.log(value);
現在將在此處定義value
。
希望這可以幫助。
您可以嘗試使用基於承諾的js的fetch api ,它將幫助您解決問題。 或其他一些側面庫,例如axios 。
問題在於,您的代碼不會在響應更改Value的“值”之前等待接收請求和console.logs。 這就是為什么我認為您不確定。
謝謝大家的回答。 我可以通過在函數外部創建一個空對象來解決該問題,並通過在函數中將值插入到空對象中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.