Tag: 承诺

Node.js / Sequelize.js / Express.js – 如何插入到多对多的关联? (同步/asynchronous?)

我有两个模型(个人,电子邮件),并试图使用Sequelize命令插入创build的“Individual_Email”表。 虽然Sequelize正在创build所需的表,但在尝试从该表添加/获取/设置时会返回以下错误:“Object [object promise]'没有方法'addEmail'”。 我错过了什么? Sequelize文档说如果模型是用户和项目,“这将添加方法getUsers,setUsers,addUsers到项目和getProjects,setProjects和addProject到用户。 这使我相信(看许诺),我很可能误解了如何使用Node的asynchronousfunction。 我已经尝试了插入的同步和asynchronous版本,都返回上面相同的消息。 续集文档: http ://docs.sequelizejs.com/en/latest/docs/associations/ 码: 路线/ index.js var express = require('express'); var router = express.Router(); var models = require('../models'); /* GET home page. */ router.get('/', function(req, res, next) { 'use strict'; var tIndividual, tEmail; tIndividual = models.Individual.create({ name: "Test" }); tEmail = models.Email.create({ address: "test@gmail.com" }); console.log(tEmail); res.render('index', […]

TypeError:promise.then(…).then(…).then(…).then(…).catch不是Node Js中的函数

我得到这个错误,我不知道如何解决它。 在一个节点的js服务器,我使用一些承诺的.then()函数,并在最后我放置了一个.catch()函数,由于某种原因无法识别。 我在很多地方看过教程,这是如何处理错误的。 我没有使用任何外部库。 错误 : TypeError: promise.then(…).then(…).then(…).then(…).catch is not a function 这是我的代码: exports.joinAlbum = function(req, res){ var promise = Album.findOne().where({'shortId': req.body.shortId}).exec(); // Returns a promise promise.then(function(albumDoc){ console.log('Then #1'); ….. } return albumDoc.save(); // Returns a promise }) .then(function(albumDoc){ console.log('Then #2'); ….. return User.findById(req.body.userId).exec(); // Returns a promise }) .then(function(userDoc){ console.log('Then #3'); …….. return userDoc.save(); […]

如果在抛出任何错误的时候如何在promise中做出断言,不会冒出来呢?

与摩卡运行这个结果超时,而不是让摩卡赶上错误,所以它可能会立即失败.. var when = require('when'); var should = require('should'); describe('', function() { it('', function(done) { var d = when.defer(); d.resolve(); d.promise.then(function() { true.should.be.false; false.should.be.true; throw new Error('Promise'); done(); }); }); }); http://runnable.com/me/U7VmuQurokZCvomD 是否有另外一种方式在诺言中作出断言,如果失败,他们会被摩卡抓住,导致立即失败? 根据柴的build议,我研究了它,似乎我必须有一个直接访问的承诺对象,对不对? 问题是,我没有直接使用诺言。如果我简化,我的坏,但这将是一个更接近现实的例子 function core_library_function(callback){ do_something_async(function which_returns_a(promise){ promise.then(function(){ callback(thing); }); }); } describe('', function() { it('', function(done) { core_library_function(function(thing){ … done(); }); }); […]

为什么promise.join()将函数作为最后一个参数?

说我在一个需要检索两个对象的过程中有一个步骤。 我将使用join()来协调检索: return promise.join(retrieveA(), retrieveB()) .spread(function(A, B) { // create something out of A and B }); 该文档显示您也可以传递处理程序作为最后一个参数: return promise.join(retrieveA(), retrieveB(), function(A, B) { // create something out of A and B }); 我很好奇这个选项存在的理由是什么。

如何做promise.all数组promise的数组?

我试图运行数组函数并行,当每个人都完成我想要的结果工作。 我正在使用承诺。 现在,我可以把所有的function在一个数组,并可以做Promise.all(数组的function),但我有像数组 [[promise1, promise2], [promise3,promise4], [promise5,promise6]], 每个承诺都是promisifiedfunction。 Promise参考文档中说Promise.all中的参数应该是一个可迭代的对象,我的数组是可迭代的。 但这不适合我。 我认为它正在执行[promise1,promise2]作为承诺,但不是个人承诺。 任何人都可以帮助我,我怎么能实现它或有没有更好的办法?

Firebase .orderByChild()。equalTo()。once()。then()当孩子不存在时承诺

我的API /auth/login端点需要像这样的req.body : { "email": "jacob@gmail.com", "password": "supersecretpassword" } 在端点上,我参考了我的Firebase数据库( https://jacob.firebaseio.com/users )。 我search数据,当我find一个与req.body.email相匹配的req.body.email ,我将密码与数据库中存储的密码进行比较。 我遵循这个Firebase博客文章中概述的承诺结构。 router.post('/login', function(req, res) { const ref = db.ref('/users'); ref.orderByChild('email') .equalTo(req.body.email) .once('child_added') .then(function (snapshot) { return snapshot.val(); }) .then(function (usr) { // Do my thing, throw any errors that come up }) .catch(function (err) { // Handle my errors with grace […]

如何拒绝(和正确使用)承诺?

小故事 : 谈论Promises / A + ,拒绝承诺的正确方法是什么 – 抛出一个错误? 但是,如果我错过了 – 我的整个应用程序将打击! 如何使用promisify和它的好处(也许你需要阅读更长的版本)? .then(success, fail)真的是反模式 ,我应该总是使用。 .then(success).catch(error) ? 更长的版本 ,被描述为现实生活中的问题(会爱上某人阅读): 我有一个使用Bluebird (A + Promise实现库)的库,从数据库中提取数据(谈论Sequelize )。 每个查询返回一个结果,但有时它是空的(试图select一些东西,但没有)。 承诺进入result函数,因为没有错误的原因(没有结果不是错误)。 例: Entity.find(1).then(function(result) { // always ending here, despite result is {} }).catch(function(error) { // never ends here }); 我想包装这个,并检查结果是否为空(不能检查我的代码中的任何地方)。 我做到了这一点: function findFirst() { return Entity.find(1).then(function(result) { if (result) […]

我怎样才能与蓝鸟承诺分页?

我有类似的东西 new Promise (resolve, reject) -> trader.getTrades limit, skip, (err, trades) -> return reject err if err resolve trades .each (trade) -> doStuff trade limit设置为某个任意数字,例如10 , skip从0开始。 我想继续增加skip直到没有更多的trades 。 doStuff是我用来处理每笔交易的函数。 这是第一次,但我想以分页的方式获得更多的交易。 具体来说,我想运行trader.getTrades更高的skip直到trades.length为0

循环通过任务瀑布 – 承诺蓝鸟

我正在寻找循环通过蓝鸟一些任务,只是使用超时作为实验机制。 [不希望使用asynchronous或任何其他库] var Promise = require('bluebird'); var fileA = { 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five' }; function calculate(key) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(fileA[key]); }, 500); }); } Promise.map(Object.keys(fileA), function (key) { calculate(key).then(function (res) { console.log(res); }); }).then(function () { console.log('finish'); }); 结果是 finish, one, […]

使用节点请求下载图像,并使用fs Promisified,在Node.js中没有pipe道

我一直在努力成功地下载一个图像,而不用pipe道到fs。 这是我所完成的: var Promise = require('bluebird'), fs = Promise.promisifyAll(require('fs')), requestAsync = Promise.promisify(require('request')); function downloadImage(uri, filename){ return requestAsync(uri) .spread(function (response, body) { if (response.statusCode != 200) return Promise.resolve(); return fs.writeFileAsync(filename, body); }) .then(function () { … }) // … } 有效的input可能是: downloadImage('http://goo.gl/5FiLfb', 'c:\\thanks.jpg'); 我相信问题在于body的处理。 我曾尝试将其转换为Buffer ( new Buffer(body, 'binary')等),但都失败了。 感谢前方的任何帮助!