Tag: 承诺

是“.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; })通常只是一个空操作。 对? 如果他们不一样,有什么区别? 发生了什么事,作者为什么这样写呢?

用Q框架和Node.js中的callback模式承诺?

即使有良好的文档化的Q框架 ,如果您使用Node.js编程几天,也是很难理解的。 但我喜欢了解它! var Q = require('q'); var fs = require('fs'); // Make the promise manually (returns a value or throws an error) var read1 = fs.readFile(fname, enc, function (err, data) { if(err) throw err; return data; }); // Convenient helper for node, equivalent to read1? var read2 = Q.nfbind(fs.readFile); // Uh?! var read3 = […]

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 […]

数组内使用lodash数组的联合

我怎样才能使用lodash数组内的数组? 例如: input: var x = [ [1,2,3,4], [5,6,7], [], [8,9], [] ]; 预期产出: x = [1,2,3,4,5,6,7,8,9]; 目前我的代码执行以下操作: return promise.map(someObjects, function (object)) { return anArrayOfElements(); }).then(function (arrayOfArrayElements) { // I tried to use union but it can apply only on two arrays _.union(arrayOfArrayElements); });

限制正在运行的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')) […]

使用Promise调用API内部for循环的最佳方法

我有5亿个对象,每个对象有n个联系人,如下所示 var groupsArray = [ {'G1': ['C1','C2','C3'….]}, {'G2': ['D1','D2','D3'….]} … {'G2000': ['D2001','D2002','D2003'….]} … ] 我在nodejs中有两种实现方式,它们是基于常规的承诺,另一种是使用蓝鸟,如下所示 定期的承诺 … var groupsArray = [ {'G1': ['C1','C2','C3']}, {'G2': ['D1','D2','D3']} ] function ajax(url) { return new Promise(function(resolve, reject) { request.get(url,{json: true}, function(error, data) { if (error) { reject(error); } else { resolve(data); } }); }); } _.each(groupsArray,function(groupData){ _.each(groupData,function(contactlists,groupIndex){ // console.log(groupIndex) […]

使用承诺顺序执行function

我想依次执行一些基于数组的asynchronous函数。 我以为这会做到这一点: var Promise = require("bluebird"); Promise.cast([1,2,3]).reduce(function(_,i){ console.log("Launching " + i); return Promise.delay(Math.floor(Math.random()*1000)).then(function(){ console.log("Executing " + i); }); },0); 但是我明白了 Launching 1 Launching 2 Launching 3 Executing 2 Executing 1 Executing 3 而不是所期望的结果 Launching 1 Executing 1 Launching 2 Executing 2 Launching 3 Executing 3 我怎样才能确保在这里完全顺序执行? 请注意,我知道如何做到这一点,没有承诺,我只对完全承诺的解决scheme感兴趣。

蓝鸟承诺绑定链

我使用蓝鸟承诺,并试图允许链调用,但使用.bind()似乎并不工作。 我正进入(状态: TypeError:sample.testFirst(…)。testSecond不是函数 第一种方法是正确调用,并启动承诺链,但我还没有能够得到实例绑定工作。 这是我的testing代码: var Promise = require('bluebird'); SampleObject = function() { this._ready = this.ready(); }; SampleObject.prototype.ready = function() { return new Promise(function(resolve) { resolve(); }).bind(this); } SampleObject.prototype.testFirst = function() { return this._ready.then(function() { console.log('test_first'); }); } SampleObject.prototype.testSecond = function() { return this._ready.then(function() { console.log('test_second'); }); } var sample = new SampleObject(); sample.testFirst().testSecond().then(function() { […]

Javascript运行asynchronous代码的每个项目的循环与承诺

我有一个函数,获取一个对象传入它的密钥和数据是一个数组。 我必须调用API来获取额外的信息,然后将其添加回到对象中,并返回整个对象。 我的第一个方法是不正确的,因为我试图从.then()传递数据,但这是错误的做法。 function asignChecklistItems(taskArray) { // get all the people's tasks passed in return new Promise(function(resolve, reject) { var promises = [] // Task Array: {"Person":[tasks,tasks,tasks]} for (var person in taskArray) { var individualTaskPerson = taskArray[person] // get the person's tasks for (var individualTask in individualTaskPerson) { // here we get each individual task […]

NodeJS与promise.catch和console.log的错误?

在运行下面的代码时,根据是否有console.log("fnError: ", fnError)注释掉了,我得到了不同的结果。 这对我来说似乎非常不利 如何在这个世界上打电话给console.log影响我的承诺? function run() { var fn = function(){ throw new Error("incorrect message"); }; // returns a promise that should fail with // an error object whose .message is "correct message" var promisifiedFn = function(){ return Promise.resolve() .then(fn) .catch((fnError) => { // commenting this out fixes things! // console.log("fnError: ", fnError); /////////////////////////////////////// […]