Tag: 蓝鸟

Node.js node-gcloud同步调用

我使用node-gcloud https://github.com/GoogleCloudPlatform/gcloud-node与Google云端存储进行交互。 我正在开发一个node.js服务器(我的第一个node.js项目),为客户提供一小组API。 基本上,当用户上传文件时,API调用会返回签名的url来显示该文件。 getSignedUrl函数是asynchronous的https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.8.1/storage?method=getSignedUrl ,我找不到从另一个函数返回结果的方法。 我已经开始玩蓝鸟的承诺,但是我不能明白。 这是我的代码: var _signedUrl = function(bucket,url,options) { new Promise(function (resolve, reject) { var signed_url bucket.getSignedUrl(options, function(err, url) { signed_url = err || url; console.log("This is defined: " + signed_url) return signed_url }) }) } var _getSignedUrl = function(url) { new Promise(function(resolve) { var options = config.gs , expires = […]

在蓝鸟中顺序运行asynchronous函数?

如果使用蓝鸟,我怎么能顺序地运行任务? 我有一个任务列表,每个任务都取决于以前的任务的结果,但任务可能是一个asynchronous的工作。 以下代码是不行的,我应该使用promise.all还是其他函数? “那么”链让我感到困惑,f2直接运行,而不是等待f1完成(我也不知道如何“解决”f1) var Promise = require("bluebird"); function f1(p1){ console.log("init value or f2 return:"+p1); var p = Promise.resolve(); setTimeout(function(){ var r = "aysnc result"; // how can i notify next step when a async operation done? // there is no p.resolve function },1000) return p; } function f2(p1){ console.log("f1 said:"+p1); return "f2 result"; } […]

蓝鸟未处理发出NodeJS的错误

即时通讯使用蓝鸟v2.8.2承诺,但即时获取未处理的错误和捕获代码不处理。 编辑来响应: var Promise = require('bluebird') util = require('util') EventEmitter = require('events').EventEmitter; var Module = function() { EventEmitter.call(this); }; util.inherits(Module, EventEmitter); var getData = function() { return Promise.reject(new Error('test')); }; Module.prototype.getCustomer = function() { var self = this; setTimeout(function() { getData().then(function() {}) .catch(function(error) { self.emit('error', error); // This causes problem!! }); }, 1000); } 解决: […]

Q.ninvoke节点蓝鸟的replace

我从Q迁移到蓝鸟项目。 在这个项目中,Q.invoke被使用了很多。 例如在这样的中心方法中: repo.count = function(entity,query) { // entity is a mongoose model var command = query = entity.find(query).count(); return Q.ninvoke(command, 'exec'); }; 什么是最好的蓝鸟重构这个代码的方式,并返回相同的“种”承诺? 阅读蓝鸟文件,似乎promisifyAll似乎是在正确的方向点。 现在,我有这个工程,但阻止呼叫: repo.count = function*(entity,query) { entity = bluebird.promisifyAll(entity); // this needs to be moved somewhere central return yield entity.find(query).count(); };

链接超时导致上次超时被拒绝?

我目前正试图用超时链接一些承诺,不pipe超时是什么,总是报告最后一个。 我用bluebird和Q做了相同的结果,所以我觉得我有一个普遍的问题。 代码基本如下所示: var Promise = require('bluebird'); Promise.delay(2000) .then(function() { return Promise.delay(2000); }) .timeout(1000, 'Timeout 1') .then(function() { return Promise.delay(500); }) .timeout(1000, 'Timeout 2') .then(function() { return Promise.delay(500); }) .timeout(1000, 'Timeout 3'); 我得到“未处理的拒绝超时错误:超时3”。 我想要的是超时1.我尝试每次超时后捕捉,但我也一样。 有没有办法让它工作,而不完全分裂?

将嵌套的'for'循环转换为Promise,Promise? 嵌套承诺?

我有一个数组,其中的值是由“/”分隔的序列,以及一个“ mapSeries ”Promise(用于连续迭代映射的辅助函数),循环遍历每个序列中的每个值。 现在,声明开始于一个嵌套的“for”循环,它将一个序列分割成若干个string,然后将这些值传递给一个空的数组,以交给“mapSeries”的承诺。 经过testing,事实certificate,这只适用于原始数组有一个序列,因为多个序列并行运行。 这怎么能被写成一个承诺,对每个序列连续运行,然后连续地为给定序列中的每个元素? 这里是for循环的尝试(适用于单个序列): var sequences = ['one/two/three', 'alpha/beta']; var elements = []; for (i=0; i<sequences.length; i++) { var series = sequences[i].split("/"); for (j=0; j<series.length; j++) { elements.push(series[j]); } var items = mapSeries(elements, function(element) { // do stuff with 'one', then 'two', then 'three' // when done..next series // do stuff with […]

第二次运行Node.js'对象不是一个函数'的有效载荷()

这个代码是用户input用户名/密码的地方,他们得到一个令牌。 我有它,如果他们input错误的信息,并得到一个401,他们再次得到提示再次尝试与.catch(function(err) { callApiToken(); }) 。 但是,第二遍我会得到Unhandled rejection TypeError: object is not a function payload(user, pass)函数的函数。 为什么是这样? function payload(user, pass) { return payload = { "thePassword": { "username": user, "password": pass } } } function postAsync(url, payload) { return new Promise(function(resolve, reject) { rest.postJson(url, payload) .on('fail', function(data, response) { httpFail(data, response, reject); reject(response.statusCode); }) .on('error', […]

mongodb本地化的推广

我正在尝试使用bluebird和mongodb,并且出现错误。 var Promise = require("bluebird") var MongoDB = require("mongodb") Promise.promisifyAll(MongoDB) return MongoDB.connectAsync(process.env.MONGO_URL).then(function(db){ var collection = db.collection('queue') return collection.find().toArray().then(function(docs){ console.log(docs) }) }).catch(function(e){ console.log(e.message) throw e }) 我得到这个错误: Unhandled rejection Error at Object.<anonymous> (/Users/thomas/Desktop/project/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:42:24) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:428:10) at Module.load (module.js:335:32) at Function.Module._load (module.js:290:12) at Module.require (module.js:345:17) at require (module.js:364:17) at Object.<anonymous> (/Users/thomas/Desktop/project/node_modules/mongodb/node_modules/mongodb-core/index.js:2:17) at Module._compile […]

为什么没有承诺的testing通过?

前几天我进入了一个美好的诺言世界,我只是觉得我已经开悟了。 承诺看起来很简单,但他们可以混淆。 你能告诉我为什么下面的testing不通过? var Promise = require('bluebird'); var expect = require('chai').expect; var request = Promise.promisifyAll(require('request')); describe('Promise', function() { it('should work again', function() { var final_result; function first_promise() { return new Promise(function(resolve, reject) { resolve("http://www.google.com"); }) } function second_promise() { return new Promise(function(resolve, reject) { resolve("This is second promise!"); }) } function inner_async_request(url_from_first_promise) { return new […]

蓝鸟:等待一个承诺解决

冒着听起来很愚蠢的风险:等待一个承诺解决的最有效的方法是什么? 说我有承诺A,我想创造承诺B,B的实现不取决于A的最终价值。即使A被拒绝,它也应该继续。 然而,这个过程不应该开始,直到A以某种方式解决。 我目前看起来如下所示: var prevResult; function doStuff() { if (prevResult) { prevResult = promise.settle([ prevResult ]).then(function() { return doStuff(); }) } else { prevResult = updateDB().finally(function() { prevResult = null; }); } return prevResult; } 代码有点不明显。 我也有点担心把一堆来自sett()的承诺链接在一起,看看它是如何执行不那么简单的协调的function。 似乎应该是一个更简单的方法来做到这一点。