/* * Retry the function fn up to max times until it successfully completes * without an error. Pause backoff * retry miliseconds between tries. */ const retry = (fn, {max = 5, backoff = 500} = {}) => Promise.resolve().then(() => { const rec = counter => Promise.try(() => fn(counter).catch(err => { if (counter <= max) { return Promise.delay(backoff * counter).then(() => rec(counter + 1)); } else { return Promise.reject(err); } })); // Init recursive function. return rec(1); })
/* * Insert document into cluster. */ report(data) { const apiKey = this.apiKey; return Promise.try(() => { // Only report errors. if (data.action === 'error') { // Register client and set data for bugsnag. const client = bugsnag(getRegistrationData(apiKey, data)); client.user = getUserData(data); client.context = getContextData(data); client.metaData = data; // Create a new error with err message. const err = new Error(data.message); // Add stack trace. err.stack = data.stack; // Report to bug snag along with full meta data. return new Promise((resolve, reject) => { client.notify(err, {}, (err, report) => { if (err) reject(err); else resolve(report); }); }); } }); }
api.get('/sendfile/test', function(req,res) { res.sendFile('test/test.txt' + (req.query.test ? req.query.test : ''), err => { // Return a promise return Promise.try(() => { for(let i = 0; i<40000000; i++) {} return true }).then((x) => { if (err) { // set custom error code and message on error res.error(501,'Custom File Error') } else { // else set custom response code res.status(201) } }) }) })
// Add middleware with promise/delay api.use(function(req,res,next) { if (req.route === '/testPromise') { let start = Date.now() Promise.try(() => { for(let i = 0; i<100000000; i++) {} return true }).then((x) => { // console.log('Time:',Date.now()-start); req.testMiddlewarePromise = 'test' next() }) } else { next() } });
const testReplace = (setCompress, replaceCompress) => { const x = new MemcacheClient({ server }); const key = `poem_${Date.now()}`; return Promise.try(() => x.set(key, poem2, { compress: setCompress })) .then(() => x.get(key)) .then(r => expect(r.value).to.equal(poem2)) .then(() => x.replace(key, poem3, { compress: replaceCompress })) .then(() => x.get(key)) .then(r => expect(r.value).to.equal(poem3)) .finally(() => x.shutdown()); }
it("should update exptime with touch", () => { const x = new MemcacheClient({ server }); const key = `poem1_${Date.now()}`; return Promise.try(() => x.set(key, poem1, { noreply: true })) .then(v => expect(v).to.be.undefined) .then(() => x.touch(key, "500")) .then(r => expect(r).to.deep.equal(["TOUCHED"])) .finally(() => x.shutdown()); });
/* * Insert document into cluster. */ report(data) { const apiKey = this.apiKey; return Promise.try(() => { // Only report errors. if (data.action === 'error') { // Register client and set data for bugsnag. const client = bugsnag(getRegistrationData(apiKey, data)); client.user = getUserData(data); client.context = getContextData(data); client.metaData = data; // Create a new error with err message. const err = new Error(data.message); // Add stack trace. err.stack = data.stack; // Report to bug snag along with full meta data. return new Promise((resolve, reject) => { client.notify(err, {}, (err, report) => { if (err) reject(err); else resolve(report); }); }); } }); }