Tag: 蓝鸟

在ES6 + babel中用蓝鸟Promisify导入类(构造函数)

假设我创build了或有一个node.js库lib.js export class C { constructor(value, callback) { callback(false, `Hello ${value}`); } task(value, callback) { callback(false, "returned " + value); } } 重要的部分是类的构造函数需要接受一个callback,因为它做的是数据库连接和文件I / O。 如果我现在导入并使用库callback样式,则一切正常(请参阅下面的c1 )。 我真的很想在图书馆中使用它来使对象构造更加方便(实际上它是一大堆类和方法)。 但是,我无法在保证安全的前提下正确地findnew的课程。 import Promise from 'bluebird'; import * as lib from './lib'; Promise.promisifyAll(lib); // old style — works as expected const c1 = new lib.C("c1", (e, v) => […]

使用async / await + Bluebird来promisifyAll

我正在构build一个使用async / await的库,我想知道是否有可能像使用async / await一样使用fs这样的本地模块。 我知道asynchronous/等待它只是在后台承诺,所以…是否有本地方式promisify一个方法或function? 目前,我正在使用蓝鸟,但我不知道这是不是一个坏模式。 例: const Bluebird = require("bluebird"); const { access } = require("fs"); const accessAsync = Bluebird.promisify(access); async function checkInput(options) { await accessAsync(options.file); /// etc return options; } module.exports = (options) => { Promise.resolve(options) .then(checkInput) }; 我结合了原生Promises和Bluebird。 我应该只使用蓝鸟吗? 谢谢。

NodeJS – 如何在没有module.exports的情况下testingindex.js

我正在testing我的NodeJs项目使用摩卡和我有一个文件, index.js是主要文件没有module.exports像CLI运行 index.js // CLI tools var bluebird = require('bluebird'); var gigatool = require('./lib/gigatool'); var debug = require('debug')('index'); var size = 20; var page = process.env.BATCH; var startDate = process.env.START; var dataDir = process.env.DATADIR; debug(page, startDate, dataDir); // requires parameters if (!process.env.BATCH) { throw new Error('BATCH environment variable is needed'); } tool = gigatool(size, page, […]

蓝鸟的Promise.settle不能用正确的值解决

我有以下代码: return Promise.settle(matches, imgur.uploadUrl) .map(function (inspection) { if (inspection.isFulfilled()) { return inspection.value().data.link; } return '#'; }) 上面的更详细的版本显示相同的问题: return Promise.settle(matches, function(match) { return imgur.uploadUrl(match); }) .then(function(results) { return results; }) .map(function (inspection) { if (inspection.isFulfilled()) { return inspection.value().data.link; } return '#'; }) 哪里 Promise =蓝鸟的承诺 matches =从string中提取的图像链接数组 imgur = https://github.com/kaimallea/node-imgur 预期的行为是.map的结果是在原始数组中的图像被上传到imgur(或'#',在上传失败的情况下由于任何原因)之后,用imgur链接数组解决的承诺。 相反,Promise.settle 立即解决(即似乎不等待imgur上传),而inspection.value()是来自matches数组的原始图像url(当尝试读取数据时会产生错误) .data.link一个string的.data.link属性)。 为什么会发生? 为什么不能上传到imgur并正确parsing?

传播承诺的正确方法是什么?

我正在使用蓝鸟来提供mongoose库。 所以,我现在find并保存数据如下: User.findOneAsync({email: req.body.text}) .then(function(user) { user.saveAsync() .spread(function(savedUser){ res.json(savedUser); }) .catch(function(err) { res.json({ status: 500, message: 'foo' }); }); }) .catch(function(err) { res.json({ status: 500, message: 'foo' }); }); 两个捕获函数是完全相同的。 这只是一个演示,我有时在实际工作中有两个相同的捕捉function。 我可以把catch里面的函数分解成它自己的函数。 不过,我不得不多次编写catch函数。 什么是避免重复捕捉function的好方法? 任何帮助,将不胜感激。

承诺链内循环

for (var i in listofInstances) { cleanupInstance(listofInstances[ i ]) .then(function () { console.log("Done" + listofInstances[ i ]) }); } cleanupInstance也是一个承诺链。 然而,目前我的for循环在完成整个承诺链之前进入下一个迭代。 有没有办法让promisify这个循环呢? 我正在使用蓝鸟库(nodejs)承诺。

是“.then(function(a){return a;})”一个没有承诺的承诺?

我正在阅读关于Bookshelf的这个教程 。 书架使用蓝鸟承诺。 有不less例子看起来像这样: var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}) .then(function(model) { return model; }); }; 我对承诺仍然不满意,但从目前我所了解到的情况来看,这似乎很奇怪。 我的问题是,上面的函数和直接返回fetch()完全一样,离开最后的then() : var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}); }; 也就是说,它仍然做同样的事情,返回相同的承诺,可以用同样的方式调用,等等? 据我所知,传递给函数的参数then得到链中前一个promise的返回值。 所以,在我看来.then(function (a) { return a; })通常只是一个空操作。 对? 如果他们不一样,有什么区别? 发生了什么事,作者为什么这样写呢?

NodeJs / Bluebird – 不断收到拒绝错误

正在build立一个监听TCP连接的守护进程>发送命令>监听事件 所以我决定使用蓝鸟来摆脱所有的callback..但我有一个问题…我似乎无法赶上拒绝的错误….我不知道什么是错的,这里是我的代码 承诺: function exec(cmd, params, options) { return new Promise(function(resolve, reject) { server.send(cmd, params || {}, options || [], function (err, res, rawRes) { if (err) reject(err.msg); resolve(res); }); }); } 执行: exec("login", { // lOGIN client_login_name: conf.user, client_login_password: conf.pass }).then(exec("use", { // SELECT SERVER sid: 4 })).then(exec("clientupdate", { // CHANGE NICKNAME client_nickname: conf.nick […]

限制正在运行的promise的并发性

我正在寻找一个承诺函数包装,可以限制/节stream,当一个给定的承诺运行,以便只有一个数量的承诺运行在给定的时间。 在下面的情况下, delayPromise不应该同时运行,他们应该以先来先服务的顺序一次运行一个。 import Promise from 'bluebird' function _delayPromise (seconds, str) { console.log(str) return Promise.delay(seconds) } let delayPromise = limitConcurrency(_delayPromise, 1) async function a() { await delayPromise(100, "a:a") await delayPromise(100, "a:b") await delayPromise(100, "a:c") } async function b() { await delayPromise(100, "b:a") await delayPromise(100, "b:b") await delayPromise(100, "b:c") } a().then(() => console.log('done')) b().then(() => console.log('done')) […]

如何使用mysljs在mySql和node.js中批量插入

我不能够使用node.js lib mysljs在我的数据库中使用批量插入。 我遵循以下答案: 如何使用node.js在mySQL中进行批量插入 没有成功。 var sql = "INSERT INTO resources (resource_container_id, name, title, extension, mime_type, size) VALUES ?"; var values = [ [1, 'pic1', 'title1', '.png', 'image/png', 500], [1, 'pic2', 'title2', '.png', 'image/png', 700]]; return connection.query(sql, [values], (result) => { if (err) throw err; connection.end(); }); 我不断收到错误: 'You have an error in your […]