Как установить тайм-аут в облачном хранилище данных Google .get? - PullRequest
0 голосов
/ 28 сентября 2018

Я только начинаю с некоторых облачных сервисов Google и пытаюсь получить объект из хранилища данных.

Если у клиента есть подключение к Интернету, все идет хорошо.

Но я хочу добавить оператор try catch для случаев, когда у клиента нет доступа к хранилищу данных по любой причине (например, к Интернету).

Вот мой код:

try{
    let search = datastore.key(['Client', Client_id])           
    datastore.get(search, /*{timeout: 1000},*/ function (err, entity) {
        console.log('limit >>>', entity.limit)
        evt.emit('comparedate', res, entity.limit)    
    });
}
catch(error){
    console.log('Error >>>', error)
}

Моя проблемаis: нет ограничения по времени для попытки подключения.Когда клиент не имеет доступа к Интернету, запрос остается «ожидающим» вечно и не переходит в состояние перехвата.

Я пробовал некоторые параметры, такие как: Global # CallOptions , нобезуспешно.

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ >>>> Я знаю, что это не самый надежный способ.Но сейчас я решил с этим кодом:

evt.on('isonline', (res) => {
    try{
        require('dns').lookup('google.com',function(err) {
            if (err && err.code == "ENOTFOUND") {
                console.log('NO INTERNET')
                evt.emit('readofflinedata', res)
            } else {
                console.log('WITH INTERNET')
                evt.emit('readonlinedata', res)
            }
        })
    }
    catch(error){
        res.status(200).send({ error: true, message: error.message })
    }   
})

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Клиент хранилища данных использует внутреннюю библиотеку google-gax .Вы можете настроить время ожидания и т. Д.передавая gax options .

datastore.get(key, {
  gaxOptions: {timeout: 1000}
}, (err, entity) => {
  // ...
});
0 голосов
/ 28 сентября 2018

Я не нашел ни одного параметра для добавления тайм-аута в функции get хранилища данных.Однако вы можете использовать Обещание и установить таймер, если выполнение функции занимает слишком много времени, оно остановит его.

var Promise = require("bluebird");
var elt = new Promise((resolve, reject) => {
   fun(param, (err) => {
     if (err) reject(err);
     doSomething(); // <- datastore.get() funtion
     resolve();
});

elt.timeout(1000).then(() => console.log('done'))
                 .catch(Promise.TimeoutError, (e) => console.log("timed out"))
...