Tag: 承诺

是否有可能通过使用Promise.resolve返回结果在promise中使用map / filter / reduce?

我现在正在做一个承诺循环如下: asyncFunc() .then(() => { return new Promise((resolve) => { for (let i = 0; i < length; i++) { // do something if (j == length – 1) { return resolve(result); } } }) .then((result) => { console.log("This shows after the loop above is done"); console.log(result); }); 我想通过使用map / filter / reduce通过replacefor循环来以更简洁的方式replace它: return new […]

在Node.js + Express中使用承诺处理错误

使用Node.js + Express(4)+ Mongoose(使用promises而不是callback),我不能理清如何清理error handling。 我所得到的(而非简化的)是: app.get('/xxx/:id', function(request, response) { Xxx.findById(request.params.id).exec() .then(function(xxx) { if (xxx == null) throw Error('Xxx '+request.params.id+' not found'); response.send('Found xxx '+request.params.id); }) .then(null, function(error) { // promise rejected switch (error.name) { case 'Error': response.status(404).send(error.message); // xxx not found break; case 'CastError': response.status(404).send('Invalid id '+request.params.id); break; default: response.status(500).send(error.message); break; } }); }); […]

如何访问Promise.map中的“this”?

我们知道,下面的this指的是window对象。 我想知道的是,我如何能够通过我的this背景而不诉诸于var self=this; 招。 有任何想法吗? 我尝试将.bind()添加到第9行的末尾,以便读取}).bind(this); 但是这也不起作用。 有任何想法吗? QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.map(companies, function (company_batch) { var params = { Entries: company_batch, QueueUrl: Config.get("AWS-Queue.Company") }; return this._sqs.sendMessageBatchAsync(params); }); }; 编辑:我标记它,但应该提到,我使用蓝鸟。 编辑:修正了一个错字。

我如何链接多个承诺?

我不太清楚,也许我错过了一些显而易见的事情,但我无法弄清楚如何链接两个承诺。 我的基于callback的代码看起来像这样: async.series([ function (cb) { // Create the directory if the nodir switch isn't on if (!nodir) { fs.mkdir('somedirectory', function (err) { if (err) { log('error while trying to create the directory:\n\t %s', err) process.exit(0) } log('successfully created directory at %s/somedirectory', process.cwd()) cb(null) }) } cb(null) }, function (cb) { // Get the contents […]

Nodejs Promise.all()总是parsing

我对承诺是新的。 我正在尝试ping一些机器来检查它们是否处于活动状态。 我正在使用本地NodeJS承诺。 我的pingfunction: function ping(addr) { return new Promise(function(resolve, reject) { var args = ['-n', '1', '-w', '5000']; args.push(addr); var ls = cp.spawn('ping.exe', args); ls.on('error', function (e) { reject(Error('There was an error while executing the ping')); }); ls.on('exit', function (code) { if(code === 0) { resolve({host: addr}); } else { reject(Error(addr + " is […]

使用async / await + Bluebird来promisifyAll

我正在构build一个使用async / await的库,我想知道是否有可能像使用async / await一样使用fs这样的本地模块。 我知道asynchronous/等待它只是在后台承诺,所以…是否有本地方式promisify一个方法或function? 目前,我正在使用蓝鸟,但我不知道这是不是一个坏模式。 例: const Bluebird = require("bluebird"); const { access } = require("fs"); const accessAsync = Bluebird.promisify(access); async function checkInput(options) { await accessAsync(options.file); /// etc return options; } module.exports = (options) => { Promise.resolve(options) .then(checkInput) }; 我结合了原生Promises和Bluebird。 我应该只使用蓝鸟吗? 谢谢。

如何等待函数或数据库查询? 然后处理结果并最终将其发回

我有这种情况: app.get('/', async function (request, response) { await foo(DbConnection).then((result) => console.log("response ready")); }) let foo = async function (DbConnection) { const myQuery = "SELECT * FROM my_table"; DbConnection.query(myQuery, async function(err, results) { console.log("query ready"); await bar(results).then((response) => console.log("bar done")) }) return; // go back to app.get() to send stuff to client } let bar = […]

当一个承诺永远不会解决时会发生什么?

我有这个非常混乱的代码使用es6 async await语法的代码片段。 我期望发生的是这个过程永远挂在await线上,因为parsing函数永远不会被调用。 但是,实际发生的是输出“开始”,然后过程退出,不再输出。 const simple = async () => { console.log('start') await new Promise(resolve => {}) console.log('done.') } simple() 然而下面的代码会打印“开始”,等待1秒钟,打印完成。 const simple = async () => { console.log('start') await new Promise(resolve => setTimeout(resolve, 1000)) console.log('done.') } simple() 我最接近的猜测是什么(没有任何证据),当节点正在等待诺言时,它会跟踪代码中发生的活动事件,当没有其他事情发生时,它就会退出。 有人可以解释为什么代码在这里退出? 运行node v8.7.0

asynchronous等待承诺

我必须等待func1才能运行func2。 但是由于func1 / 2/3包含承诺,它早打印“定期”。 async function executeAsyncTask () { const res1 = await func1(a,b,c) const res2 = await func2(a,b,c) const res3 = await func2(a,b,c) return console.log(res1 , res2 , res3 ) } executeAsyncTask () FUNC1 class A{ promise_API_CALL(params){ //some code here.. } func1(a,b,c){ //so work here… this.promise_API_CALL(params, function( data, err ) { if(err){console.error(err)} console.log( data […]

如何正确地捕捉承诺中的错误?

我觉得这两件事并不相同: return somePromise() .then() .then() .then() .catch(function(e) { throw e; }); 和 return somePromise() .catch(function(e) { throw e; }); .then() .catch(function(e) { throw e; }); .then() .catch(function(e) { throw e; }); .then() .catch(function(e) { throw e; }); 第一个片段只会捕获最新的错误(其他错误将会丢失),而第二个片断将捕获链中任何位置的错误。 但是我必须错过一些东西,因为强迫用户在每一个承诺失败之后都要记住抓住承诺的目的。 我误解和放置一个.catch()最后会捕捉链中的任何错误?