簡體   English   中英

在函數外部調用時,在函數中定義的全局變量顯示未定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM