0

if else ブロックから stat の値を設定したいのですが、それを設定して警告すると、「未定義」と表示されます。stat の値を設定するにはどうすればよいですか。これが私のコードです。

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);
};

前もって感謝します

4

3 に答える 3

1

Facebook API は非同期です。つまり、呼び出しに渡すコールバック関数は、FP.api後で API 呼び出しが終了したときに実行されますが、呼び出しを行った直後にアラートが実行されます。FB.apiこれはもちろん、コールバック関数がまだ実行されていないことを意味します。したがって、統計はまだ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
}
于 2010-09-09T18:03:37.060 に答える
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 を呼び出すと、すぐに戻ります。したがって、外部にアラートがある場合は、すぐに呼び出されます。その後、コールバック (3 番目のパラメーターとして渡す関数) が呼び出されます。

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
});
于 2010-09-09T18:00:44.760 に答える
1

関数呼び出しは非同期です。これは、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);
  });
}
于 2010-09-09T18:01:05.537 に答える