Tag: 蓝鸟

你如何使用javascript promisestring中的.then函数中的参数调用函数?

我正在将使用node.js编写的AWS lambda函数转换为使用promise而不是callback函数。 我用处理程序代码将所有的函数包装在处理程序中。 我试图打破简单的function,所以我可以在处理程序代码中尽可能平坦的承诺链。 我卡在一个点,我有一个.then(),返回一个值,我需要传递给我的一个函数,这已被promisified,以及其他参数。 我search了高和低,但找不到这样做的语法的一个例子。 我甚至不知道我在做什么是正确的。 我发现的所有文章都解释了简单的承诺链,只通过.then()方法返回一个值。 没有一个能够将其转化为另一个function。 以下是我到目前为止: var bbPromise = require("./node_modules/bluebird"); var AWS = require("./node_modules/aws-promised"); var rp = require("./node_modules/request-promise"); var moment = require('./node_modules/moment.js'); var dynamodb = new AWS.dynamoDb(); exports.handler = function(event, context) { "use-strict"; // This gets a token that will be used as a parameter for a request function getToken(params){ return […]

蓝鸟承诺与事件发射器

我对使用蓝鸟承诺是相当新的。 我试图在发射器上使用它们。 但是,我被困在如何处理错误。 我有一个stream对象是发射器。 代码如下 – return new Promise((resolve, reject) => { var onDocFunc = doc => { //JSON.parse('*'); // some logic goes in here to construct setStmt bulk.find(query).upsert().update({$set: setStmt}); count++; if (count % bulkSize == 0) { stream.pause(); var execute = Promise.promisify(bulk.execute); execute().catch(() => {}).then(() => { stream.resume(); }); } }; stream.on('data', onDocFunc); stream.on('end', […]

使用蓝鸟mongoose,得到“.bind不是一个函数”

我使用蓝鸟的mongoose : const Promise = require("bluebird"); const mongoose = require("mongoose"); mongoose.Promise = Promise; 我想使用Promise.bind在promise链中共享variables: function getAutherOfBook(name) { return Book.findOne( { name: name }, "-_id auther") .then(doc => { return doc.auther; }); }; function geNationalityOfAuther(name) { return Auther.findOne( { name: name }, "-_id nationality") .then(doc => { return doc.nationality; }); }; getAutherOfBook("The Kite Runner") .bind({}) .then(auther […]

mongoose4.11.0承诺超时

我正在使用mongoose和蓝鸟。 该设置是通过书,并正在使用useMongoClient选项,通知要求。 Mongoose.connect(myConnectionString, {useMongoClient: true}); 然而没有我使用的承诺执行。

承诺性能问题。 读文件太慢了

我使用承诺读取硬盘驱动器中的10000多个文件,并在确切的位置find一个数字。 我使用glob来返回文件名,并find每个文件我运行方法readFile(readFile返回作为promisse)。 当所有的文件被处理时,我可以继续我的工作。 function readFilesGlob(globPath,options,progressCallback){ return new Promise(function (fulfill, reject){ glob(globPath, options, function (err, files) { var readPromisses=[]; for(var id in files){ readPromisses.push(readFile(files[id])); } Promise.all(readPromisses).then( function(filesContents){ fulfill(filesContents) } ); }); }); } 所有的承诺都只在完成时才完成,无法显示处理进度 function readFilesGlob(globPath,options,progressCallback){ return new Promise(function (fulfill, reject){ glob(globPath, options, function (err, files) { var readPromisses=[]; for(var id in files){ readFile(files[id]).then(function(data){ //everything shows […]

Q承诺相当于BlueBird Promise.Bind()

几个问题,Q有一个bindB bind()方法在BlueBird API和这个幻灯片JavaScript承诺〜Kerrick长 ? 它是核心承诺/ A +规范的一部分吗? 如果没有,是否有一个polyfill或解决方法?

如何确认更新是否成功使用mongoose和蓝鸟的承诺

我正在使用bluebird和mongoose作为节点页面。 我想检查更新是否成功,然后通过socket.js发送数据到客户端。这里是我无法弄清楚的代码部分: .then(function(a) { var g = collection3.update({ _id: a.one[0]._id }, { $set: { avg: a.one[0].avg } }).function(err, d) { if (!err) { return 1; // Here's the problem } }) return { updated: g, info: a }; }).then(function(c) { console.log(c.updated); // I can't get the `1` value if (c == 1) { io.sockets.in('index|1').emit("estimate", c.three); […]

在promisified ExpressJs函数中引发错误

我不太确定我是否明白在承诺中如何处理错误(而且我对承诺还是比较陌生的,所以我可能不会充分利用它们)。 我有以下代码: app.listenAsync = Promise.promisify(app.listen); app.listenAsync(config.port) .then(function done() { console.log("We're listening!"); }) .catch(function (err) { console.log("Abort abort!"); }); 由于我不明白的原因,我的catch()从来没有被调用,即使app.listenAsync抛出一个错误,例如EADDRINUSE。 为什么? 编辑 :我只是注意到,如果我这样做 var listenAsync = Promise.promisify(app.listen); listenAsync(config.port) .then(function done() { console.log("We're listening!"); }) .catch(function (err) { console.log("Abort abort!"); }); 给予几乎正确的行为。 listenAsync引发一个错误(这次在catch语句中被catch ) Possibly unhandled TypeError: listener must be a function未被Possibly unhandled TypeError: listener must be […]

为什么在callback函数setInterval中取消蓝鸟承诺?

Promise = require 'bluebird' cb = -> console.log 'callback!' p = Promise.resolve(5) .cancellable() .tap -> p.cancel() setInterval(cb, 100) cb函数只能被调用一次。 注释.tap -> p.cancel()允许它重复运行。 添加一个try块没有帮助。 也许这是显而易见的,但我做了一些研究,找不到解释。

运行蓝鸟承诺顺序,没有返回值?

这个问题已经以各种方式提出,但不是那么简单。 这个Promise.all将被重写,以便promise1在promise2之前完全运行? var promise1 = function() { .. lots of promise stuff }; var promise2 = function() { .. lots more promise stuff }; Promise.all([promise1, promise2]).then(function() { log.info("ran promise1 & promise2"); }); Promise.all并行运行promise1和promise2。