Tag: 承诺

Node.js / Sails.js – forEach循环中的函数

我试图得到以下简化的代码完成,然后同步: factors.forEach(function(factor, index){ Factor.findOrCreate({function_name: factor}).exec(function(){ sails.log('success'); }) }); 我该怎么做? 到目前为止我已经尝试过: 将第2-4行放在一个单独的函数中,并从循环中调用它 使用async.js async.series()调用 但是,虽然它会执行调用(打印“成功”),但它会很less在数据库中find或创build一个因子,所以它与代码的asynchronous特性有关。 使用promise等待所有findOrCreate()调用返回,然后继续 var promises = []; factors.forEach(function(factor, index){ promises.push(Factor.findOrCreate({function_name: factor})); }); Q.all(promises).then(function(){ sails.log('success'); }); 我已经尝试了这个版本的几个版本,但我仍然无法打印“成功” – 这似乎是正确的方式来做到这一点,但我不太清楚什么是错的。 问橡皮鸭

使用承诺收集未知大小的分页数据

我正在查询REST-API来获取所有组。 这些小组分成五十批。我想收集所有这些小组,然后继续处理它们。 直到现在,我依靠callback,但我想使用承诺来链接所有组的检索,然后进一步处理结果数组。 我只是不太了解如何使用promise来取代recursion函数调用。 我将如何使用A + promise来逃避我用这个代码创build的callback地狱? function addToGroups() { var results = [] collectGroups(0) function collectGroups(offset){ //async API call sc.get('/tracks/'+ CURRENT_TRACK_ID +'/groups?limit=50&offset=' + offset , OAUTH_TOKEN, function(error, data){ if (data.length > 0){ results.push(data) // keep requesting new groups collectGroups(offset + 50) } // finished else { //finish promise } }) } }

执行和延迟序列的承诺数组

我正在尝试执行一系列函数synchronousI usingy。 在调用下一个函数之前,每个函数应该被延迟3秒。 我必须做错事,因为它们都是在3秒钟的时间内同时调用,而不是按顺序调用。 我究竟做错了什么? var tasks = [] allGroups.forEach(function(group){ tasks.push(deleteFromGroup(group)) }) tasks.reduce(function(cur, next) { return cur.then(next); }, Promise.resolve()).then(function() { console.log("all executed") }); }) } function deleteFromGroup(group){ return new Promise(function(resolve, reject) { setTimeout(function(){ console.log(group.id) resolve() }, 3000); }) }

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

为什么这个JavaScript Promise拒绝()在结果callback处理?

这里有更多代码的一个子集。 JavaScript中的Node.js 实质上,相当于函数调用了一些unit testing(在函数b )。 从b返回时,调用exceptiontesting(在函数c )。 c调用同步exceptiontesting(在函数d )。 后来, c将调用另一个函数(比如说)进行asynchronousexceptiontesting(Promise reject()的使用)。 在Node.js中使用Promise似乎是最好的,但即使使用它们也并不总是导致我预测的行为。 'use strict'; function d() { return new Promise(function(resolve, reject) { console.log('start d throw test'); try { throw new Error('Error type'); } catch (e) { console.log('d catch block e.message=' + e.message + ' rejecting to c'); return reject(new Error('d ' + e.message)); } […]

使用promise来编写可读代码的最佳方法是什么?

我有一些node.js的承诺代码看起来像这样: function myFunc(data) { Q(data).then(function(data) { return getPromise1(globalVar).then(function(res1a) { return getPromise2(JSON.parse(param2)).then(function(res2a) { return doStuff(); }).then(function(res2b) { return getPromise3(data).then(function(res3a) { return getPromise4.then(function(res4a) { // more stuff }) }) }) }) }) }) 正如你所看到的,这段代码不太可读。 有一个更好的方法吗?

Promise-MySQL无法将连接释放回池中

我对Node.js开发非常陌生,我正在开发一个应用程序,需要我从mysql数据库中提取用户。 我正在使用promise-mysql库来查询一个mysql数据库。 我正在尝试使用这样的连接池: var pool = mysql.createPool({ host: hgh.host, user: hgh.user, password: hgh.pw, database: hgh.name, connectionLimit: 10 }); 作为我的模块中的全局variables。 然后我有上面的函数从池中返回一个连接。 function connect() { return pool.getConnection().then(function(connection) { return connection }).catch(function(error) { console.log("Connect failed"); throw ErrorModel.generateErrorObject(error, 500); }); } 下面是我用来查询数据库的function: function getUser(username) { var sql_query = `SELECT * FROM userstable WHERE userName = ` + `'` + […]

我如何发送表单与请求承诺?

我正在尝试使用request-promise库或类似的任何东西,通过从节点发送到另一台运行Node的机器发送文件。 使用正常的请求模块,我可以这样 var req = request.post(url, function (err, resp, body) { if (err) { console.log('Error!'); } else { console.log('URL: ' + body); } }); var form = req.form(); form.append('file', '<FILE_DATA>', { filename: 'myfile.txt', contentType: 'text/plain' }); 这个代码来自这个问题: 在Node.js中使用POST请求上传文件,但是它不使用promise。 任何人都可以解释如何做同样的事情,但与请求承诺库,或者如果有任何其他方式promisify呢?

有关Javascript承诺回报的最佳实践

我是新的承诺,我想知道哪个是最好的做法与本地诺言(NodeJs)。 我在下面放了一些代码来更好地理解这个问题: CODE_A function foo(condition) { return new Promise((resolve, reject) => { if(condition){ resolve('Promise result!'); } else { reject('Promise rejected!'); } }); } CODE_B function foo(condition) { return new Promise(() => { if(condition){ return Promise.resolve('Promise result!'); } else { return Promise.reject('Promise rejected!'); } }); } 哪一个是最好的select,以便返回一个承诺? 有一些最佳实践规则要遵循?

使用ES6的顺序迭代承诺

我期待下面的node.js代码将按以下顺序打印输出 1000 2000 3000 4000 "All tasks completed" 而是按照下面提到的顺序打印 "All tasks completed" 1000 2000 3000 4000 代码 'use strict'; var tasks = [1000, 2000, 3000, 4000]; var promise = Promise.resolve(); function test() { tasks.forEach(function(task) { promise = promise.then(function() { setTimeout(function() { console.log(task); }, task); }); }); } test(); promise.then(function() { console.log('All tasks completed'); }); 需要修改哪些内容才能完成“所有任务”。 […]