Tag: 承诺

对每个承诺的更多承诺node.js / js

我有一个承诺的function,循环医院,酒店和赌博。 然后它正在合并并返回它。 重写这个函数的最好方法是什么,所以每个promiseArrs结果都可以循环,并做一些更有前途的工作? function GetOwnedFirms(userid) { var promiseArr = [ hospital.find({userid: userid}), hotel.find({owner: userid}), gambling.find({userid: userid}), ]; return Promise.all(promiseArr).then(function (results) { // Want to loop trough each results with a new promise etc.. // call funct1 promise to hospital, func2 to hotel, etc etc. // then after everything is done, concat them and return. var […]

等待蓝鸟执行所有的承诺

我想等所有的承诺解决或拒绝,并得到解决承诺的结果在.then和错误“ 'use strict'; const Promise = require('bluebird') var delayOne = Promise.method((p = 1) => p); var delayTwo = (p = 1) => { throw new Error('asf'); }; Promise.all([delayOne(100), Promise.method(delayTwo)(10), delayOne(300)]) .then((res) => console.log(res)) // no logs from here .catch((e) => console.log(e)) .done(); 但我只从.catch获取日志。 我的错误在哪里?

从Promise返回数据

我的主要目标是使用PDF.js并将parsing的PDF数据发送到前端。 PDF.js库对承诺进行处理,并通过页码返回文件中的数据。 这是我的问题所在。 我不太熟悉承诺,并且在循环中返回数据。 我的代码目前看起来像这样: var pdf = path.join(__dirname, '../../testoutput.pdf'); pdfJsLib.getDocument(pdf).then(function(doc){ var promises = []; for(i = 1; i <= doc.numPages; i++){ //promises.push(doc.getPage(i)); doc.getPage(i).then(function(page){ promises.push(page.getTextContent()); var response = []; if(i == doc.numPages + 1){ var promiseLimiter = promises.length; Promise.all(promises).then(function(data){ response.push(data[0]); if(promiseLimiter == doc.numPages){ res.status(200).json(response); } }) } }) 我试图将page.getTextContent()信息推送到一个数组,并发送数组作为响应,但我明白,我这样做是错误的方式。 任何想法如何在这种情况下使承诺循环正常工作?

ES6承诺超时间隔

我试图将我的一些代码转换为承诺,但我无法弄清楚如何在承诺中链接一个新的承诺。 我的承诺函数应该每隔一秒左右检查一次数组的内容,如果里面有任何项目应该解决。 否则,应该等待1s再次检查,等等。 function get(){ return new Promise((resolve) => { if(c.length > 0){ resolve(c.shift()); }else{ setTimeout(get.bind(this), 1000); } }); } let c = []; setTimeout(function(){ c.push('test'); }, 2000); 这是我期望我的get()承诺函数工作,它应该打印“testing”最多2或3秒后: get().then((value) => { console.log(value); }); 显然这不起作用,什么也不打印

调用多个API而不需要太多的嵌套

我需要根据前一次调用的结果调用多个端点。 return http.get('url1') .then(response1 => { return response1.data }) .then(data => { http.get('url2' + data) .then(response2 => { return response2.data }) // etc … until the 'nth url' }) 它可以相当嵌套。 有没有办法使这个变平坦,也许使用发电机?

代码的作品,但最好的做法是有一个try / catch块内的承诺?

用Promise包装try/catch是不是很好? 我正在审查下面的代码,我似乎无法理解在Promise中使用try/catch块的必要性。 另外,为什么没有Promise拒绝的地方,正如你可以在catch块中看到Promise解决的那样。 请帮我理解这段代码,就最佳实践和效率而言,在Promise中有try/catch的意思。 我也非常感谢任何有关清理代码的build议。 getRoute(): any { return async (request: any, reply: any) => { const result = new Promise<string>( async (resolve, reject) => { try { let userIsValid = await this.validator.validate(request.payload, RegisterUserValidator); if (userIsValid.error) { resolve(responseHelper.getErrorResponse(ResponseErrorCode.joiValidatorError, userIsValid.error)); throw new ControlFlowNonError(); } let results = await this.authUser.registerUser(request.payload); resolve(responseHelper.getSuccessResponse(results, null)); } catch (error) { let […]

等待每个承诺后继续循环完成

下面我有两个function。 其中一个回报是一个承诺,我希望在每一个循环等待它先完成,然后移动一个。 正如你在下面看到的结果是不是所需/同步。 我应该不使用async.forEachof function test(num, callback) { console.log("inside function: "+num) return new Promise((resolve, reject) => { my.promise(num).then(() => { console.log("done: "+num) resolve(callback); }).catch(e => console.error(e)); }).catch(console.error); } function start_function() { //stuff async.forEachOf(arr, function (itm, i, callback){ console.log(i) test(i, callback).catch(e => console.error(e)); }, function (err) { console.log("ALL DONE") }); } 结果: 0 inside function 0 […]

nodeJS:Promise在循环结束之前执行,callback堆栈

我正在使用promise来创buildresult array Postman响应; 然而,在forEach循环完成之前, resolve()被调用,而resolve()在forEach循环之外。 我觉得这是由于callback堆栈function。 考虑到callback stack ,在forEach循环完成执行之后,如何执行resolve() ? (server.js): logServer.post('/log/asset/audit/', function(req,res){ console.log('— starting log/asset/audit'); logDB.collection('logs') .find({"transaction.assetName" : assetName, "transaction.assetOwner" : assetOwner}) .toArray( (err, result) => { let token = JSON.parse(JSON.stringify(self_jwt_body)); var JSONPromise = new Promise((resolve, reject) => { //initialization result.forEach(function(element, index, array) { console.log('- before request.post'); request.post({ url: `${dc_link}/audit`, //includes dc_IP, dc_port and […]

听stream言承诺

我一直在阅读有关Observables 。 有一件事我读到,就是它能够像stream一样听。 我试着用下面的代码。 const Rx = require('rxjs/Rx'); Promise = require('bluebird'); let i = 0; function calculate() { return new Promise((resolve, reject) => { setInterval(() => { console.log(++i); resolve(i); }, 5000); }) } let source = Rx.Observable.fromPromise(calculate()); source.subscribe( next => { console.log(next, ' next '); }, err => { console.error(err) }, () => { console.log('done!'); […]

如何对待羽毛球内的承诺?

我想在插入数据库之前validation数据。 Feathersjs的方式是通过使用钩子。 在插入一组权限之前,我必须考虑用户post提供的数据的完整性。 我的解决scheme是find与用户提供的数据相关的所有权限。 通过比较列表的长度,我可以certificate,如果数据是正确的。 钩子的代码贴在下面: const permissionModel = require('./../../models/user-group.model'); module.exports = function (options = {}) { return function usergroupBefore(hook) { function fnCreateGroup(data, params) { let inIds = []; // the code in this block is for populating the inIds array if (inIds.length === 0) { throw Error('You must provide the permission List'); } //now […]