Tag: 承诺

在这个node.js函数中运行多个MySQL查询

我有这个node.js函数,它执行单个MySQL查询后返回一个Promise。 function deletePoint(PointObj, door_id) { return new Promise(function(resolve, reject) { try { var connection = jonMySQL.getMySQL_connection(); var mysql_query = '`DELETE FROM table1 WHERE user_id=? and door_id=?`'; var mysql_query_placeholder_arr = [PointObj.user_id, door_id]; connection.query(mysql_query, mysql_query_placeholder_arr, function(err, rows, fields) { if (err) { return reject(err); } else { resolve(rows); } }); } catch (err) { reject(err); } }); […]

承诺循环。 如何检测哪个承诺现在返回结果?

我认为这是一个普遍的问题,但具体情况是: 我使用猛犸模块将docx文件转换为html 。 该模块返回一个promise 。 我有一个文件数组,当我使用循环来创build每个文件的承诺,我需要知道什么样的承诺返回我的结果(知道什么文件被处理)。 for(var i=0;i<filesPaths.length;i++){ mammoth.convertToHtml( {path: filesPaths[i]} ) .then(function(result){ filesHtml.push(result.value); //here I need to know the value of filesPaths[i] }) }

为什么这个带有promise的简单nodejs程序永远运行?

我正在运行一个相当简单的nodejs程序,它从一个mssql数据库中取出一些行,用它们做一些事情,然后退出。 相反,它做它应该做的,但是然后永远运行。 我忘记了什么让程序完成? 还是只是我的期望,当所有的承诺已经履行的程序将退出是错误的,我需要手动终止? 'use strict'; var mssql = require('mssql'); var myssqlConfig = { user: '…', password: '…', server: '…', port: 1435, database: '…' }; mssql.connect(myssqlConfig).then(function() { new mssql.Request() .input('someRow', mssql.VarChar(), 'someValue') .query("SELECT * FROM tableName WHERE someColumn > @someValue") .then(function(recordset){ // do non-relevant stuff with the record set. }) .catch(function(err){ console.log('Error: '+err); }); }).catch(function(err) […]

你如何使用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', […]

如何在Node.js中同步使用请求?

这是我的基本脚本来刮一个给定的url,并获得其中的所有链接。 我想在请求函数完成后打印links_arr 。 但是,在这里请求callback函数被执行,所以,我得到一个空的数组打印。 我如何做到这一点同步? 即按以下顺序。 请求URL。 Cheerio获取所有链接。 我们遍历所有项目,并将它们插入到links_arr数组中。 打印数组。 PS我知道Node.js意味着asynchronous任务,但这是我需要履行的要求。 我看过Promise这样的东西可以帮助我,但是由于Node没有先进的知识,我不知道如何实现。 一些帮助将不胜感激。 我正在使用http请求的请求库,URLparsingurl和Cheerio的HTMLparsing。 var request = require('request'); var cheerio = require('cheerio'); var url = require('url'); var all_links = []; var processing = []; var processed = []; var base_url = "https://www.npmjs.com"; var base_host = "www.npmjs.com"; var analyze_href_sync = function(u){ console.log("Analysing URL "+u); url_obj = […]

在使用Promise.all()forEach呈现NodeJS页面之前,先加载Firebase数据,

我试图创build一个从Firebase加载多个数据集的页面,然后将它们传递给NodeJS呈现的页面。 我会感谢一些帮助,确保在forEach迭代之后发生这种情况; 即,我不确定如何让Firebase for each迭代成为我的承诺的一部分。 非常感谢! router.get('/', function(req, res, next) { var getBrands = brandRef.once('value').then(function(snapshot){ var brands = []; snapshot.forEach(function(childSnapshot){ console.log(childSnapshot.val()['name']); brands.push({'name' : childSnapshot.val()['name'] }); }); return brands; }); var getStores = storeRef.once('value').then(function(snapshot){ var stores = []; snapshot.forEach(function(childSnapshot){ stores.push({'name' : childSnapshot.val()['name'] }); }); return stores; }); var getProducts = productRef.once('value').then(function(snapshot){ var products = []; snapshot.forEach(function(childSnapshot){ […]

使用validate.jsparsing所有asynchronous承诺

我正在使用这个库进行validation: https : //validatejs.org/#validate-async 。 我有一个相当复杂的方式来validation自己的模式嵌套的对象。 请参阅下面的相关代码。 基本上,它会: 为每个嵌套对象创build一个asynchronous承诺。 然后调用Promise.all来解决或拒绝validation。 除了一个问题,它运作良好。 在默认承诺库Promise.all “快速失败”,因此在后来的快速中间件的catch处理程序中,它只接收第一个失败的promise的结果。 但对于我的validation工作,我需要结合所有失败的承诺的结果。 是否有一个替代承诺库(A +兼容),我可以交换到validation器,这将允许我捕获所有错误? ValidationAdapter.prototype.validateCreateCtrl = function(req, res, next){ var obj = {}; var self = this; this.logger.debug("Validating " + self.config.modelName + " create request"); self.fieldList.forEach(function(fieldName){ obj[fieldName] = req.body[fieldName]; }); self._resolveObjectRefs(obj); this.logger.debug("Composed request object " + JSON.stringify(obj, null, 2)); var Promises = []; […]

如何迭代node.js中的promise数组?

在JavaScript中,我有一个非平面的Promise数组: const array = [ [ promise11, promise12.. promise1n ], [ promise21, promise22.. promise2n ], [ promise31, promise32.. promise3n ], … [ promisek1, promisek2.. promisekn ] ]; 如何以这样一种方式遍历数组,在下一个承诺数组将在前一个承诺数组解决之后才开始解决? 例如,我希望脚本等待[ promise11, promise12.. promise1n ]承诺[ promise11, promise12.. promise1n ]解决,然后调用下一个承诺数组。 我正在寻找一个通用的解决scheme,因为我的应用程序无法预先知道需要多less个调用(这是一个webscrapper)。

这两个promises语法的区别

我在这两种答复方式之间相当困惑,有人能解释一下这个区别吗? 我试图find一些谷歌的行踪,但无法find完全匹配。 var a = Promise.resolve('foo'); return a.then(); VS return Promise.resolve('foo').then();