Tag: 蓝鸟

如何通过Bluebirds .map传输一些数据?

我使用Blubird和Sequelize(使用Blubird)。 假设我有一个类似于以下的代码: Feed.findAll() .map(function (feed) { // <—- this is what I'm interested in below // do some stuff here return some_promise_here; }) .map(function (whatever) { // What is the best way to access feed here? }) …. 我发现了一些暗示可能的解决办法的答复,但我不能完全明白这一点。 我曾尝试Promise.all() .spread() ,但我从来没有设法使其工作。

Node.js:如何以正确的方式处理promise

我有一个Node.js(express.js) – 服务器,我提供了一个简单的authenticationapi。 在我的一条路线中,我在返回“资源”之前改变了很多子步骤。 我使用蓝鸟的承诺。 router.post('/register', function(req, res, next) { // ——- 1. check if already existing var p = store.checkIfExisting(req, res) //–>mongoose .find(). Returns promise .then(function(isExisting) { if (isExisting) { console.log("try to cancel"); p.cancel(); } // ——- 2. Facebook validation return validateFacebookSignedRequest(req.body.fbsrCookie); //True/False }) .then(function(fbIsValid) { // ——- 3. create Users return store.saveUser(req, res); […]

有条件的完成承诺

我有一个承诺链,我执行一些行动。 当我达成一个特定的陈述时,我想创build一个分支,它可能会继续链,否则,将解决整个即将到来的承诺链。 readFile('example.json').then(function (file) { const entries = EJSON.parse(file); return Promise.each(entries, function (entry) { return Entries.insertSync(entry); }); }).then(function () { if (process.env.NODE_ENV === 'development') { return readFile('fakeUsers.json'); } else { // I am done now. Finish this chain. } }) // conditionally skip these. .then(() => /** … */) .then(() => /** … */) // […]

在节点js中使用Promise

我在nodejs中是新的。 我已经开始学习nodejs了。 我想在nodejs中使用promise。 我已经成功安装bluebird.Cureently我的代码看起来: req.getConnection(function(err,connection){ var query = connection.query('SELECT node_questions.question_name,node_questions.description FROM node_questions LEFT JOIN node_user ON node_questions.user_id=node_user.id;SELECT * FROM node_user ORDER BY points DESC LIMIT 5',function(err,rows) { var data =rows[0]; var data2 = rows[1]; console.log(data); console.log(data2); res.render('index', { page_title: 'Welcome',session:req.session.userId,email:req.session.email,data:data,data2:data2}); }); }); }; 我想在这里使用承诺。 我能怎么做。 请帮忙…

使用promise时如何突破串行循环?

我有一个长文本文件,我逐行循环提取一些事件数据并将其存储在数据库中。 该文件定期获得最新的数据在顶部。 当发生这种情况时,我再次运行文件提取新的事件,但是当我遇到已经在数据库中的事件时(文件总是按照最新到最旧的顺序),我想停止。 使用这个回答中描述的reduce()方法的问题正确的方式来编写promise的循环 ,我想出了这个函数来parsing文件: function parse( file) { var lines = file.split("\n"), latestDate; return lines.reduce(function(promise, line) { return promise.then(function() { if (/* line matches date pattern */) { latestDate = line; } else if (/* line matches event pattern */) { return Event.createAsync(line, latestDate); } return promise; }); }, Promise.resolve()) .catch({ errorName: "uniqueViolated" }, […]

在失败之前轮询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'); }); } 这是正确的方法吗?

nodejs,postgres和bluebird

我一直在尝试使用pg库的蓝鸟许诺,甚至发现这个post,但可悲的是我太StackOverflow用户的新来简单地直接评论: 与蓝鸟手动promisifying pg.connect 简而言之,在执行剪切和粘贴代码之后,用蓝鸟Promisfy函数尝试的所有内容都不会引入任何查询构造函数,也许我在尝试中滥用了ClientAsync函数,但是希望这是一个快速和容易的帮助,因为我尝试的一切都会导致一些变化: Possibly unhandled TypeError: Object function (err) { if(err) { pool.destroy(client); } else { pool.release(client); } } has no method 'queryAsync' 我抛弃了PromisfyAll函数的结果,并确保足够的queryAsync不存在: 相关片段: Client: { [Function] Query: { [Function] super_: [Object] } }, Query: { [Function] super_: { [Function: EventEmitter] listenerCount: [Function] } }, pools: { all: {}, Client: { [Function] Query: […]

包装asynchronous方法返回一个承诺(蓝鸟)

我想在蓝鸟承诺中包装一些同步函数,以便我可以将它们与其他asynchronous方法混合。 我对这个主题的另一个问题的答案,并创造了两个方法包装在一个承诺: var Promise = require("bluebird"); var foo1 = Promise.method(function(arg){ console.log(arg); return "ret foo1"; }); var foo2 = Promise.method(function(arg){ console.log(arg); return "ret foo1"; }); 但是,当调用这些方法 foo1.then(foo2); 我有这个例外 TypeError: Object function () { var ret = new Promise(INTERNAL); ret._captureStackTrace(); ret._pushContext(); var value = tryCatch(fn).apply(this, arguments); var promiseCreated = ret._popContext(); debug.checkForgottenReturns( value, promiseCreated, "Promise.method", ret); ret._resolveFromSyncValue(value); return […]

Bluebird.js:如何添加等待Promise.map的每次迭代?

我正在使用Promise.map处理数组。 对于每个元素,我执行一个asynchronous操作,返回一个promise。 不过,我想在每个呼叫之间引入一些延迟,因为下游对请求数量有限制。 这是我想要做的 return Promise.map(array, function (elem){ // perform an async call using elem // wait for 500 ms }) 我怎样才能达到相同的?

那么在最后的承诺之间有什么区别呢?

我finally看到了蓝鸟的文档,但是我还是不太明白与then的差别。 要清楚:我确切地知道为什么then被catch后被调用。 我想让它在被捕之后被调用。 这是意图。 我的问题是:如果我希望代码总是被执行,而不pipepromise的状态如何, then vs finally的区别是什么呢? 我build立了这个testing: var Promise = require("bluebird"); function test1 () { console.log("RESOLVE + THEN + CATCH + THEN"); return new Promise((resolve, reject) => resolve()) .then(() => console.log("then")) .catch(err => console.log("error:", err.message)) .then(() => console.log("end")); } function test2 () { console.log("REJECT + THEN + CATCH + THEN"); return new Promise((resolve, […]