NodeJS: setTimeout callback rubrika: Programování: JavaScript
Ahoj,
jsem začátečník a potřebuji nadstavit jednu knihovnu pro práci s DB o connection timeout (jelikož ho nemá a pak tam trčí třeba 20 sekund)
Vše je psané v callbacích a nějak nemůžu přijít na to, jak to správně napsat.
Ukázka:
findUser(callback) { var timeout = setTimeout(function() { return callback(new Error('timeout')); }, 2000); queryDB(function(err, user) { clearTimeout(timeout); return callback(err, user); }); }
Jde o to, že ten vnitřní return v anonymní funkci se nevykoná ve funkci findUser, takže ji neukoční,
tudíž ve výsledku dostanu 2 callbacky: výsledek result (pokud je) a error.
Jak správně prosím obalit volání timeoutem s callbackem ?
Díky
Return ti tu nepomůže.
findUser(callback) { var elapsed = false; var timeout = setTimeout(function() { elapsed = true; callback(new Error('timeout')); }, 2000); queryDB(function(err, user) { clearTimeout(timeout); if (!elapsed) callback(err, user); }); }
Tj. musíš nějak takhle. Asi bych volil spíš promisu než callback. Nicméně standardně promisa nic takovýho nemá, musel bys jí stejně rejectnout tím timeoutem podobnym způsobem, napsat si na to nějakou fci nebo použít nějakou implementaci, která má něco jako třeba Q promise, metodu timeout. Ne každá implementace to má. Nicméně implementací je hromada http://promisesaplus.com/implementations a jde o jednoduchej princip.
https://github.com/kriskowal/q/wiki/API-Reference#promisetimeoutms-message
promise.timeout(10000).then...
Pro plný přístup na Devel.cz se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře