I need to do several attempts on the async function getDBfileXHR, but I don't know how to handle this. I am new to chaining promises. Should I chain them like this?
return getDBfileXHR(dbUrl(), serverAttempts)
    .then(function () { // success
        console.log('-basic XHR request succeeded.');
        return dbReadyDeferred.promise;
    })
    .catch(function (){
        return getDBfileXHR(dbUrl(), serverAttempts)
        .then(function (){
            console.log('-basic XHR request succeeded after second attempt.');
            return dbReadyDeferred.promise;
        })
        .catch(function () { // error
            console.log("-basic XHR request failed, falling back to local DB file or localStorage DB...");
            return fallbackToLocalDBfileOrLocalStorageDB();
        });
    })
or like that :
return getDBfileXHR(dbUrl(), serverAttempts)
.then(function () { // success
    console.log('-basic XHR request succeeded.');
    return dbReadyDeferred.promise;
})
.catch(function (){
    if (typeof serverAttempts !== "undefined") serverAttempts++;
    console.log('on passe dans le catch, serverAttempts = ', serverAttempts)
    if (serverAttempts < 2) {
        return getDBfileXHR(dbUrl(), serverAttempts)
        .then(function () { // success
            console.log('-basic XHR request succeeded.');
            return dbReadyDeferred.promise;
        })
        .catch(function (){
            console.log("-basic XHR request failed, falling back to local DB file or localStorage DB...");
            return fallbackToLocalDBfileOrLocalStorageDB();
        })
    } else {
        console.log("-basic XHR request failed, falling back to local DB file or localStorage DB...");
        return fallbackToLocalDBfileOrLocalStorageDB();
    }
})
This second code seems to work, but I am not sure it is best practices.