Articles of 蓝鸟

Promise.all消耗我所有的RAM

我有一个我使用的API的速率限制器,每秒允许20个请求。 所有的请求都是基于承诺的,一旦有回应,这个承诺将被API数据解决。 问题: 我设置了一个包含58k个承诺的promiseArray,全部等待响应。 所以慢慢地,内存在增加,直到内存不足。 在我的具体情况下,我不需要将parsing的数据传递给我的then() ,数据正在吃掉我所有的RAM。 代码: }).then(() => { // 2. Crawl for all clanprofiles from these leaderboards const promiseArray = [] for (let i = 0; i < clanTags.length; i++) { // Resolved data from getClanProfile() is eating up all my RAM const p = backgroundScheduler.getClanProfile(clanTags[i], true) promiseArray.push(p) } return Promise.all(promiseArray) }).then(() […]

Promise findOneAsync variable = {“isFulfilled”:false,“isRejected”:false}?

使用蓝鸟Promisfymongoose,我有一个Promise.map(函数与一系列if / else循环通过一个数组,以查看引用文档是否存在,否则创build一个.. 将findOneAsync的产品分配给一个variables,然后将“variable._id”分配给制作中的新文档(主承诺),控制台日志{"isFulfilled":false,"isRejected":false} 这是一个片段: for (i=0; i<items.length; i++) { var existingItem = Models.Items.findOneAsync({ item: items[i] }); console.log( "existingItem : "); console.log( JSON.stringify(existingItem) ); console.log( "existingItem._id : " + existingItem._id ); 这是一个日志: existingItem : {"isFulfilled":false,"isRejected":false} existingItem._id : undefined 为什么可能为Model.Item.findOneAsync挂起existingItemvariables?

无法弄清楚如何使用asynchronous请求的收益率

我对节点有点新鲜,对于koa我是全新的。 我正在尝试使用生成器来向API执行asynchronousWeb请求,但是我无法弄清楚如何将所有的部分放在一起。 作为一个说明,我使用蓝鸟,因为我看到一些例子这样做,这似乎是一个好主意。 如果没有蓝鸟有更简单的方法去做我想做的事情,那也是很好的做法。 在我的模块中: plugin.searchForItem = function * (name) { Promise = require('bluebird'); request = Promise.promisifyAll(require('request')); console.log("making request"); yield request.getAsync('http://apisitegoeshere.com/apicall').then(function * (result) { var response = result[0]; var body = result[1]; console.log(response.statusCode); yield response; }); }; 我这样称呼它: search.searchForShow = function (name) { data = this.plugins[0].searchForItem(name); console.log("search returned: " + data); console.log("search returned2: " + […]

与蓝鸟诺言使用ldapjs

我在这里发布类似的东西: 使用ldapjs的承诺 。 不幸的是,它仍然没有解决。 这次我尝试了蓝鸟,希望能得到一些好运。 // https://www.npmjs.com/package/ldapjs var Promise = require('bluebird'); var ldap = Promise.promisifyAll( require('ldapjs') ); var config = require('./config'); var print_r = require('print_r').print_r; var my_filter = "(&(objectCategory=person)(objectClass=user)" + "(cn=" + 'someone' + "))"; var ldap_username = config.ad.username; var ldap_password = config.ad.password; var ldap_url = config.ad.url; var ldap_dn_search = config.ad.dn_search; process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; ldap.Attribute.settings.guid_format […]

Nodejs与promise保持并行

我有这样的字典: {go: ['went', 'run'], love: ['passion', 'like']} 一个键的价值是它的同义词。 而'getSynonymWords(word)'是一个asynchronous函数,它返回一个promise,其值是与传递参数相对应的同义词列表。 我怎样才能循环通过对象recursion地获得另一个对象: {went: [], run: [], passion: [], like: []} 这是我的一段代码: function getRelatedWords(dict) { return new Promise(function(resolve) { var newDict = {}; for(var key in dict){ if (dict.hasOwnProperty(key)) { var synonyms = dict[key]; Promise.map(synonyms, function (synonym) { return getSynonymWords(synonym).then(function (synonyms) { newDict[synonym] = synonyms; return newDict; }); […]

蓝鸟 – 如何早日打破承诺链

PromiseA().then(function(dataA){ if (dataA.foo == "skip me") return ?? //break promise early – don't perform next then() else return PromiseB() }).then(function(dataB){ console.log(dataB) }).catch(function (e) { //Optimal solution will not cause this method to be invoked }) 如何修改上面的代码来提前中断(然后跳过第二个())?

承诺Js:等待承诺履行

我正在与Bluebird在Node.Js中做出承诺,并想知道如何在履行承诺(完成)时作出函数返回。我想要的行为是: function getItem(){ functionReturningPromise.then(function(result){ //do some operation on result return result; }); } 但是,上述实现不会返回任何东西,因为承诺在执行时没有完成。 什么是最好的解决方法呢? getItem的目的是修改任何functionReturningPromise返回,然后返回它

如何使用请求库和Bluebird发送发布请求?

所以inheritance人我的设置: var Promise = require("bluebird"); var request = Promise.promisify(require('request')); 这工作: request('url') 它返回一个承诺 这不: request.post('url', {form: {type: 'artist'}}) 给我这个错误: TypeError: Object function promisified(_arg0,_arg1) { … }has no method 'post' at /Users/beamer30/projects/wevo/controllers/music.js:85:30 at Array.map (native) at MusicSearch.spotifyRelated (/Users/beamer30/projects/wevo/controllers/music.js:84:22) at MusicSearch.findRelatedArtists (/Users/beamer30/projects/wevo/controllers/music.js:48:7) at musicController.search (/Users/beamer30/projects/wevo/controllers/music.js:100:17) at Layer.handle [as handle_request] (/Users/beamer30/projects/wevo/node_modules/express/lib/router/layer.js:76:5) at next (/Users/beamer30/projects/wevo/node_modules/express/lib/router/route.js:100:13) at Route.dispatch (/Users/beamer30/projects/wevo/node_modules/express/lib/router/route.js:81:3) at Layer.handle […]

承诺 – 在Promise中捕获所有的拒绝。所有

我有这个虚拟代码 var Promise = require('bluebird') function rej1(){ return new Promise.reject(new Error('rej1')); } function rej2() { return new Promise.reject(new Error('rej2')); } function rej3() { return new Promise.reject(new Error('rej3')); } Promise.all([rej1(),rej2(),rej3()] ).then(function(){ console.log('haha') },function(e){ console.error(e); }) 在拒绝处理程序中,我只看到第一个拒绝。 是否有可能查看所有三个拒绝?

promise链里面的返回值没有被调用

我正在使用承诺库蓝鸟,我目前正在运行的问题,该函数内的一切运行良好,但当我尝试返回一个值,该函数返回undefined 。 这是承诺链: function foo() { createGroupMembers(parsedChat).then(function(val) { var members = val; createMessages(parsedChat, maxPages).then(function(val) { var messages = val; Promise.all([ createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)]) .then(function (results) { var front = results[0]; var stats = results[1]; var backcover = results[2]; var book = head + front + stats + members + messages + backcover; […]