我有此方法fallbackToLocalDBfileOrLocalStorageDB
其返回一個承諾和調用另一個方法getDBfileXHR
這也是一個承諾。嵌套承諾打字稿角2
在這段代碼中,我想知道它,我必須使用'resolve()'或者如果解析getDBfileXHR
會自動解決fallbackToLocalDBfileOrLocalStorageDB
?
正如你可以看到我的評論部分then().catch()
,但我不知道如果我不得不離開它們。
感謝您的幫助。
fallbackToLocalDBfileOrLocalStorageDB() {
return new Promise(function (resolve, reject) {
if (this.storageService.get('prodata') === null) {
if (this.connectionStatus.f() !== 'online') {
} else {
this.sendErrorEmail("BL: online but falling back to local proDB", 10);
}
console.log('...falling back to local proBD.jsonp.');
return this.getDBfileXHR('proDB.jsonp');
// .then(function() {
// console.log('...falling back to local proBD.jsonp succeeded.');
// resolve();
// })
// .catch(, function() {
// console.log('...error, shit.');
// reject();
// });
EDIT表示完全嵌套的功能,具有部分固定的代碼:
import { Injectable } from '@angular/core';
...
export class UpdateProDB {
constructor(
) {
}
get() {
var debugOptionUseLocalDB = 0,
prodata = [],
serverAttempts = 0; return new Promise((resolve, reject) => {
if (debugOptionUseLocalDB) {
return this.fallbackToLocalDBfileOrLocalStorageDB();
}
if (this.connectionStatus.f() === 'online') {
console.log("Fetching DB from the server:");
return this.getDBfileXHR(this.dbUrl(), serverAttempts)
.then(function (data) {
console.log('-normal XHR request succeeded.');
resolve(data);
})
.catch((reason)=> {
if (typeof serverAttempts !== "undefined") serverAttempts++;
console.log('on passe dans le catch, serverAttempts = ', serverAttempts)
if (serverAttempts < 2) {
return this.getDBfileXHR(this.dbUrl(), serverAttempts)
.then(function() {
console.log('-basic XHR request succeeded.');
})
.catch(function(){
console.log("-basic XHR request failed, falling back to local DB file or localStorage DB...");
})
} else {
console.log("-basic XHR request failed, falling back to local DB file or localStorage DB...");
return this.fallbackToLocalDBfileOrLocalStorageDB()
.then((data)=>{
resolve(data);
})
.catch((reason)=> {
reject(reason);
});
}
});
});
}
getDBfileXHR(url, serverAttempts) {
return new Promise((resolve, reject) => {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onload =()=> {
if ((request.readyState === 4) && ((request.status >= 200 && request.status <= 299) || request.status === 304 || request.status === 0)) {
console.log('-we get response '+request.status+' from XHR in getDBfileXHR');
var jsonText = request.responseText.replace("callback(", "").replace(");", "");
if (jsonText === '') {
console.error('-error');
reject({
status: request.status,
statusText: request.statusText
});
} else {
var parsedJson;
try {
parsedJson = JSON.parse(jsonText);
} catch (e) {
resolve(request.response);
}
}
};
request.onerror =()=> {
reject({
status: request.status,
statusText: request.statusText
});
};
console.log("sending request.send()");
request.send();
});
}
fallbackToLocalDBfileOrLocalStorageDB() {
return new Promise((resolve, reject) => {
if (this.storageService.get('prodata') === null) {
if (this.connectionStatus.f() !== 'online') {
} else {
this.sendErrorEmail("BL: online but falling back to local proDB", 10);
}
console.log('...falling back to local proBD.jsonp.');
return this.getDBfileXHR('proDB.jsonp', undefined)
.then(function (data) {
console.log('...falling back to local proBD.jsonp succeeded.');
resolve(data);
})
.catch((reason)=> {
console.log('...error, shit.');
reject(reason);
});
} else {
resolve();
}
});
}
我部分固定的代碼都與你的答案..但我認爲我還不在那裏!你認爲什麼? – Louis
它在做什麼?它沒有做什麼? –
我甚至沒有運行它!我剛纔檢查了腳本錯誤;) – Louis