簡體   English   中英

從函數的回調中返回變量

[英]returning a variable from the callback of a function

我正在使用以下功能:

function loop_perms(permissions) {
.... call check_perm here....
}
function check_perm(perm) {
        var result;
        FB.api(
         {
            method: 'users.hasAppPermission',
            ext_perm: perm
         }, function(response) {
            result = response;
         });
         return result;
    }

現在,問題是我從check_perm的結果中獲得了一個undefined的信息,而在Firebug控制台中,我可以看到response的值為0或1(取決於perm)

有人知道我在做什么錯嗎? 我猜測這與我試圖捕獲回調中變量的值有關。

關於Nikhil Gupta。

我假設Facebook API是異步的。 因此,在執行return result ,尚未調用該回調。 您必須提供來自調用函數的回調:

function check_perm(perm, callback) {
    var result;
    FB.api(
     {
        method: 'users.hasAppPermission',
        ext_perm: perm
     }, callback);
}

function loop_perms(permissions) {
    check_perm(whatever here, function(result) {
        // do something with result
    });
}

看起來您正在異步調用FB.api ,將其傳遞給一個匿名函數作為給result提供值的回調。 執行回調之前check_perm返回,此時result仍不確定。

問題1:結果可由回調讀取,但它是一個副本,因此您無法按照自己的方式寫。 (可以在本地而非全局范圍內編寫,可以通過將其設置為全局變量來“解決”此子問題,但仍然無法使您的代碼正常工作)

問題2:FB.api最有可能在將來異步調用,以使check_perm立即返回,並導致其當前處於任何狀態(未定義)

您需要將處理實際響應的代碼放在該回調函數中,以便在響應可用時執行該回調函數。 此時,您甚至不需要結果變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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