複数の Facebook API を全部 $.Deferred にする
init とかの部分は略
// ログイン Deferred
var $login = $.Deferred(function ($dfd) {
FB.login(function (response) {
if (response.authResponse) {
$dfd.resolve(response);
} else {
$dfd.reject(response);
}
});
}).promise();
// FB.api の Deferred ラッパー、可変引数
function fbDfd() {
var $dfd = $.Deferred(),
args = [],
i;
for (i = 0; i < arguments.length; i++) {
args[i] = arguments[i];
}
args.push(function (response) {
if (!response || response.error) {
$dfd.reject(response);
} else {
$dfd.resolve(response);
}
});
FB.api.apply(this, args);
return $dfd.promise();
}
// ログイン後にAPIを呼び出す。 複数 API も then で連結可能
$login.then(
function (response) {
return fbDfd('/me/friends');
}
).done(function (response) {
console.log(response); // FB.api のレスポンス
});