Я обнаружил, что при медленном сетевом соединении и больших документах / вложениях PouchDB.sync выдаст ошибку тайм-аута: ETIMEDOUT!
Мой код прост, просто синхронизируйте данные из удаленного CouchDB в локальный браузер PouchDB.
this._getDBServer()
.then(db => {
return db.sync(dbLocalURL)
})
.then(result => {
log.debug('%s:sync ok',label,result)
resolve(true)
})
.catch(e => {
log.warn('%s:sync error:',label,e)
resolve(false)
})
И doc на PouchDB.com может частично решить эту проблему.В соответствии с документом, я настраиваю два параметра «batch_size», «batch_limit» на 1, и результат лучше, я получил меньше ошибок, но не могу удалить их полностью.
Я отслеживал исходный код, его здесь выдается ошибка:
if (xhr.status >= 200 && xhr.status < 300) {
var data;
if (options.binary) {
data = createBlob([xhr.response || ''], {
type: xhr.getResponseHeader('Content-Type')
});
} else {
data = xhr.responseText;
}
callback(null, response, data);
} else {
var err = {};
if (timedout) {
err = new Error('ETIMEDOUT');
err.code = 'ETIMEDOUT';
} else if (typeof xhr.response === 'string' && xhr.response !== '') {
try {
err = JSON.parse(xhr.response);
} catch (e) {}
}
err.status = xhr.status;
callback(err);
}
значение тайм-аута здесь является значением по умолчанию: 10000, если я напрямую изменяю значение тайм-аута на 60000, то ошибкане будет выдаваться, поэтому я думаю, что проблема в том, что в моих документах слишком много вложений для синхронизации, это приведет к превышению времени ожидания в медленной сети.
Так, как я могу решить эту проблему?Есть ли другой способ избежать ошибки?Или я должен установить таймаут XHR дольше?Если это так, где это правильное место для установки?
Моя версия PouchdDB: 6.4.3 Моя версия CouchDB: 2.1.2