2010-09-09 2 views
0

Я хочу установить значение stat из блока if else, но когда я его установил и предупредил, он говорит мне «undefined». Как установить значение stat. Вот мой код.Значение переменной настройки Javascript

deleteComment = function(postId){ 
    var stat = "Don't Know"; 
    FB.api(postId, 'delete', function(response) { 
    if (!response || response.error) { 
     stat = "Error2"; 
    } else { 
     stat = "Deleted" 
    } 
    }); 

    alert(stat); 
}; 

Заранее спасибо

ответ

1

Вы должны принести сигнал (или любой другой) в асинхронном обратного вызова:

deleteComment = function(postId){ 
    var stat = "Don't Know"; 
    FB.api(postId, 'delete', function(response) { 
    if (!response || response.error) { 
     stat = "Error2"; 
    } else { 
     stat = "Deleted" 
    } 
    alert(stat); 
    }); 
} 

При вызове API, он немедленно возвращается. Таким образом, если у вас есть предупреждение снаружи, оно вызывается немедленно. Затем, позже, вызывается ваш обратный вызов (функция, которую вы передаете в качестве третьего параметра).

EDIT: Вы не можете вернуть stat из deleteComment. Вместо этого, сделайте следующее:

deleteComment = function(postId, callback){ 
    FB.api(postId, 'delete', function(response) { 
    if (!response || response.error) { 
     stat = "Error2"; 
    } else { 
     stat = "Deleted" 
    } 
    callback(stat); 
    }); 
} 

Вы могли бы назвать это как:

deleteComment(postid, function(stat) 
{ 
    // use stat 
}); 
+0

В основном я хочу, чтобы вернуть значение стата от стереть комментарий – Novice

1

Ваш вызов функции asynchronuous. Это означает, что alert() в вашем коде запускается, когда HTTP-запрос еще не вернулся.

ли оповещение в функции обратного вызова, потому что только тогда он имеет значение:

deleteComment = function(postId){ 
    FB.api(postId, 'delete', function(response) { 
    var stat = "Don't Know"; 
    if (!response || response.error) { 
     stat = "Error2"; 
    } else { 
     stat = "Deleted"; 
    } 
    alert(stat); 
    }); 
} 
1

с Facebook API является asynchronous, что означает функцию обратного вызова, который вы передаете в FP.api вызов будет позже, когда API вызов завершен, но ваше оповещение будет запущено сразу после того, как вы сделали звонок FB.api, что, конечно же, означает, что функция обратного вызова еще не запущена, и поэтому stat остается Don't Know.

Чтобы заставить его работать, вы должны поставить alert внутри обратного вызова:

deleteComment = function(postId){ 


    var stat = "Don't Know"; 

    // call is made... 
    FB.api(postId, 'delete', function(response) { 

     // if we land here, the callback has been called 
     if (!response || response.error) { 
      stat = "Error2"; 

     } else { 
      stat = "Deleted" 
     } 
     alert(stat); // now - inside the callback - stat is actually set to the new value 
    }); 

    // but execution continues 
}