Tag: async await

我是用async / await函数和Mongoose处理错误的好方法吗?

在我的网站上,我使用了很多asynchronousfunction来处理我网站的大部分内容,例如创build文章,pipe理员帐户,渲染视图等。 我习惯于在控制器中创build需要的asynchronous函数,然后在asynchronous执行块内部执行所有这些函数,在那里使用try {} catch(){}来捕获任何错误。 但是,我想知道是否只使用try {} catch(){}使得我错过了一些错误? 另外,我用Mongoose和Native Promises。 而且,这是做到这一点的好方法吗? 我重复这种模式,因为很多时间,所以我想知道如果我必须改变一半的asynchronousfunction。 这是一个控制器的例子: // getArticle {{{ /** * Handles the view of an article * * @param {HTTP} request * @param {HTTP} response */ getArticle: function (request, response) { /** * Get the article matching the given URL * * @async * @returns {Promise} Promise containing […]

是否有可能使一个asynchronous函数返回一个mongoose查询而不是一个承诺?

build立 假设我们有一些文件Foo和Bar 。 Foo有一个name字段,可以用来识别除了使用文档_id以外的其他文档。 Bar包含对Foo文档的引用。 const fooSchema = new mongoose.Schema({ name: { type: String, unique: true } }); const Foo = <any>mongoose.model<any>('Foo', fooSchema); const barSchema = new mongoose.Schema({ foo: { type: mongoose.Schema.Types.ObjectId, ref: 'Foo' }, date: Date }); const Bar = <any>mongoose.model<any>('Bar', barSchema); 现在假设我们有一个Foo文件的name ,但不是它的_id 。 我们想find所有引用Foo文档的Bar文档。 所以我们编写一个函数,首先find具有给定name的Foo文档,然后使用它来查找Bar文档。 barSchema.statics.findBarWithFooName = async function(name: string) { let […]

如何使用asynchronous/等待承诺答复?

我使用Koa2框架与Nodejs 7和本地asynchronous/等待function。 我试图在promiseparsing后为结果呈现模板( koa-art-template模块)。 const app = new koa() const searcher = require('./src/searcher') app.use(async (ctx) => { const params = ctx.request.query if (ctx.request.path === '/') { searcher.find(params).then((items) => { await ctx.render('main', { items }) }) } }) 我想等待searcher模块获取项目,但Koa给我错误 await ctx.render('main', { items }) ^^^ SyntaxError: Unexpected identifier 如果我将设置为searcher.find(params).then(…)等待,一个应用程序将工作,但不会等待项目。

与请求一起使用asynchronous

所以我最近跳上了asynchronous/等待列车,试图让我仍然抓住一些概念。 我已经开始尽可能多地切换到asynchronous/等待,而那些不提供它的软件包,我发现了诺言版本。 无论如何,我偶然发现了request-promise-native模块,就像请求一样,但是使用了promise,我敢肯定你可以看到。 我一直在尝试使用asynchronous/等待它,它的工作,但我不知道我使用它的权利。 实际上,我甚至不确定它是否比使用诺言有优势,但是我正在转换的这个特定的函数有很多callback,所以我试图保持标签的数量在最小。 testFunction: async (param) => { let results; try { results = await request(requestOptions); } catch (e) { return (e); } // Do stuff with results 现在这个工作,我得到了预期的结果,但我的问题是1.这是甚至正确的方式来使用asynchronous/等待和2.是否有任何利益,这对图书馆提供的标准承诺呢?

节点callback承诺与asynchronous/等待

我试图编写一个简单的函数,将节点式callback函数转换为承诺,所以我可以使用它们与asynchronous/等待。 当前代码: function toPromise(ctx, func, …args) { let newPromise; args.push((err, res) => { newPromise = new Promise((resolve, reject)=> { if(err) reject(err); else{ resolve(res) }; }); }); func.apply(ctx, args); return newPromise; } 示例用法: const match = await toPromise(user, user.comparePassword, password); //trying to avoid the following: user.comparePassword(password, (err, res) => { … }); 这可能与一些伟大的图书馆没有任何意义,但我只是试图编码这是一个练习。 问题当然是匹配评估未定义,显然promise会在await语法行之后得到解决。 任何想法如何解决这个问题?

在失败之前轮询n次(在两次尝试之间有延迟)

我们需要编写一个Node.js函数来轮询某个API端点以获取先前请求的计算结果。 结果需要一个随机的时间来生成,可能不是我生成的。 我们希望尽快得到它,但也不想等太久,这意味着经过一定的API调用后,我们希望函数失败(拒绝承诺)。 我们的代码和API之间有单向通信。 const Bluebird = require('bluebird'); function getResult() { return new Bluebird(async function (resolve, reject) { let counter = 0; while (counter < 10) { await Bluebird.delay(1000); const res = await apiCall(); if (res.data) { resolve(res.data); } else { counter += 1; } } reject('timeout'); }); } 这是正确的方法吗?

构成koaasynchronous函数中间件的错误

我正在使用koa-compose将指南中build议的中间件放在一起。 我inputkoa-compose作为kompose 。 我有以下代码: const home = async function home (ctx,next) { if(ctx.path === '/') { ctx.body = 'Hello World!' } else { await next() } } const random = async function random (ctx,next) { console.log(ctx) if(ctx.path === '/random') { console.log('Inside random function') ctx.body = Math.floor(Math.random() * 10) } else { await next() } } […]

在Nodejs中使用asynchronous等待redis和bluebird

纠正我,如果我在这里错了。 这就是我所做的 client = Promise.promisifyAll(redis.createClient()) let reply = await client.getAsync('foo_rand000000000000') console.log('reply',reply.toString()) 我得到Unexpected token错误。 我有这个在我的.babelrc { "presets": [ "es2015", "stage-3" ] } 有人可以指出我在这里做错了吗?

如果NodeJS的function花费太长时间,是否会超时?

我有一些第三方API运行的function,大约需要30分钟才能返回结果(他们做了一些冗长的计算)。 现在,如果我使用Nodejs调用这样一个适当的callbackAPI,默认情况下,Nodejs会等待30分钟的时间来返回结果,还是会超时? 如果超时,有没有办法增加等待时间?

asynchronous函数或async =>导出默认值时?

export default async function () { }; 要么 export default async () => { }; 导出默认函数时首选哪一个,为什么?