我刚才使用@Override
protected Parcelable onSaveInstanceState()
{
super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", customBitmap);
return bundle;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
super.onRestoreInstanceState(state);
Bundle bundle = new Bundle();
customBitmap = bundle.getParcelable("bitmap");
}
和$.when
,我似乎无法让他们工作
我尝试做的是运行一些功能,当它们全部完成后触发最终功能
以下是我尝试过的几个选项
选项1 - 根据JQuery的文档,按照我的理解,返回$.Deferred()
(这是脚本中的一个功能)
d1.getRating is not a function
选项2 - 返回// Set Deferred
var d1 = $.Deferred();
// Return movie information
if (idResp[0].type === "movie") {
// Output Slug
traktSlug = 'movies/' + idResp[0].movie.ids.slug;
// Output
$.when(d1).done(function (ratingValue) {
console.log('Rating Is: ' + ratingValue);
outputIMDb(showCheckIn, traktSlug, ratingValue);
});
// Get Rating
d1.getRating(idResp[0].type, idResp[0].movie.ids.trakt);
}
ratingValue is undefined
非常感谢任何有关正确方向的建议或推动
完整的源代码可以是viewed on GitHub
更新
我在再次阅读JQuery docs之后意识到// Return movie information
if (idResp[0].type === "movie") {
// Output Slug
traktSlug = 'movies/' + idResp[0].movie.ids.slug;
// Output
$.when(getRating(idResp[0].type, idResp[0].movie.ids.trakt)).done(function (ratingValue) {
console.log('Rating Is: ' + ratingValue);
outputIMDb(showCheckIn, traktSlug, ratingValue);
});
}
不是通用函数的名称,所以我修改了我的代码,但我仍然得到resolve()
返回< / p>
更新了选项1代码
ratingValue is undefined
更新2
抱歉,对于不包含// Set Deferred
var d1 = $.Deferred();
// Return movie information
if (idResp[0].type === "movie") {
// Output Slug
var traktSlug = 'movies/' + idResp[0].movie.ids.slug;
// Output Div
$.when(d1).done(function(ratingValue) {
console.log('Rating Is: ' + ratingValue);
outputIMDb(1, traktSlug, ratingValue);
});
// Get Rating
d1.resolve(getRating(idResp[0].type, idResp[0].movie.ids.trakt));
}
功能,我深表歉意。如下
getRating
答案 0 :(得分:1)
要做的主要是写getRating()
来回复承诺。您可以宣传XMLHttpRequest()
,但使用jQuery.ajax()
会更容易。
function getRating(type, id, season=0, episode=0) { // mmm, formal defaults - odd for browser-based javascript.
var slugType;
switch(type) {
case 'movie':
slugType = 'movies';
break;
default:
slugType = 'movies';
}
return $.ajax({
url: 'https://api.trakt.tv/' + slugType + '/' + id + '/ratings',
headers: {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': APP_KEY
},
dataType: 'json'
}).then(function(response) {
return Math.round(response.rating * 10);
}).then(null, function(xhr, textMessage, errorThrown) {
console.error('getRating error: ', textMessage);
return $.when(0); // error recovery.
});
}
然后,在主程序中也使用jQuery.ajax()
:
chrome.storage.local.get('access_token', function(result) {
var ACC_TOK = result.access_token;
if (ACC_TOK && typeof ACC_TOK !== undefined) {
if (tabURL.includes('imdb.com')) {
$.ajax({
url: 'https://api.trakt.tv/search/imdb/' + tabURL.match(/tt\d{7}/),
headers: {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': APP_KEY
},
dataType: 'json'
}).then(function(idResp) {
if(idResp[0].type === 'movie') {
return getRating(idResp[0].type, idResp[0].movie.ids.trakt).then(function(ratingValue) {
console.log('Rating Is: ' + ratingValue);
outputIMDb(1, 'movies/' + idResp[0].movie.ids.slug, ratingValue);
});
} else {
console.log("Type: " + idResp.type);
}
}).fail(function(xhr, textMessage, errorThrown) {
console.error(textMessage);
});
}
}
});
请注意,由于jQuery.ajax()
会返回一个承诺,因此无需生成/解析您自己的jQuery.Deferred()s
。
上面的代码可能不是100%正确,但应该与工作解决方案相距甚远。