Tag: es6 promise

从asynchronous调用的承诺和条件

我正在使用AWS DynamoDB( aws-sdk )的Node.js实现我的服务。 我不清楚如何实现以下承诺的情况: 我得到一个请求来修改具有指定属性的实体 我试图find数据库中的实体(asynchronous调用find ) 如果实体没有find,那么创build一个初始状态(asynchronous调用createInitialStateObject ) 根据特定规则(asynchronous调用applyModifications )修改实体(位于数据库之前或刚创build的第3步) 这是我第一次尝试: function scenario(params) { find(params).then((data) => { let objectExists = checkExistense(data); if (!objectExists) { createInitialStateObject(params).then((data) => { console.log("Object created"); // OK }).catch((err) => { console.error("Object not created"); // exit and return error }); } applyModifications(params).then((data) => { // OK, return data }).catch((err) => […]

即使被拒绝的承诺被处理,也会收到`UnhandledPromiseRejectionWarning`

我已经构build了一个函数,它遍历一个包含同步代码和Promises的Generator : module.exports = { isPromise (value) { return typeof value === 'object' && value !== null && 'then' in value; }, runGen (generatorFunc, startValue) { let that = this, i = 0; function *iterator(resolve, reject) { let runGeneratorFunc = generatorFunc(startValue), yieldedOut = {done: false}, yieldIn; while (!yieldedOut.done) { console.log(i++, 'Ready for next iteration'); if […]

为什么在节点7.2.0中logging被拒绝的`Promise`会导致logging一个堆栈跟踪?

在节点7.2.0中运行此代码时: let prms = Promise.reject(new Error('error')); prms.catch(() => {}); console.log(prms); 我正在期待Promise {<rejected> Error: error}被logging到控制台,而是我收到这个输出: Promise { <rejected> Error: error at Object.<anonymous> (/Users/davidlund/Dropbox/test.js:1:89) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) at Module.runMain (module.js:605:10) at run (bootstrap_node.js:420:7) at startup (bootstrap_node.js:139:9) at bootstrap_node.js:535:3 } 这是为什么?

何时使用asynchronousnodejs?

我不是说ES7的asynchronous,但一般的asynchronous函数,如callback和promisses。 所以,我研究了关于NodeJS和事件循环。 一切都让我相信NodeJS有一种asynchronous的错觉。 据我所知,这只有当function必须通过外部媒体传递时才有效。 例如,执行一个读取文件(将被OS API使用),或者执行一个将使用外部API的请求。 我发现很less有人谈论这个问题,我想在这里和你讨论一下。 我的问题是:我是否正确的想法? 还有,如果有实际的方法来找出asynchronous工作在哪里,它不支付? 在某些情况下,如果我是正确的,asynchronous只会花费更多的内存。

我怎样才能使用承诺来捕捉错误,当他们可能不被包装在一个承诺?

背景 我正在使用承诺,我有许多function,可能会或可能不会返回一个承诺,可能会或可能不会失败,如下面的示例中: //does not return a Promise, simply a string let goodFun = function(){ return "I like bananas!"; }; //blows up! let badFun = function(){ throw "A general error blaahh!"; }; //You get the point … 由于这些函数可能会也可能不会返回Promises,并且可能会也可能不会失败,所以我需要等待所有这些函数的执行。 为了实现这一点,我有一个函数来调用它们,并等待它们的执行: let asyncFun = function(){ return Promise.all([badFun(), goodFun()]); }; 问题 到现在为止还挺好。 我的代码调用asyncFun ,我期望它的一些函数实际上失败。 为了做好准备,我加了一句话: let executor = function(){ […]

Promise.all不用于asynchronous内部函数

我有一个项目(菜),我需要从MongoDB的每个项目(盘)的业主清单。 我正在使用承诺执行这样的 Dish.find({}) .limit(lim) .sort({created : 1}) .exec() .then(function(dishes){ if (!dishes) { return next(new errors.ResourceNotFoundError('The resource you requested could not be found.')) next() } return dishOwners.getOwners(dishes) }) .then(function(data){ return res.send(200, data) next() }) .catch(function(err){ return next(new errors.InternalError(err.message)) next() }) dishOwners.getOwners(盘)函数返回一个Promise.all,它像所有的盘子一样 module.exports.getOwners = function(dishes){ return Promise.all(dishes.map(function(dish){ User .findOne({_id:dish.created_by}) .then(function(user){ return { dish: dish, owner: user } […]

asynchronous调用Node.JS上的mySql

所以,我试图在我的node.js项目asynchronousgetConnection和查询,因为我想只在我的查询后,我的回应。 这是代码, router.post('/', function(req, res, next){ var queryRows; con.getConnection(function(error, connection){ if(error){ }else{ connection.query('SELECT * FROM Tablee', function(error, rows, fields){ queryRows = rows; }); } }); res.render('home', {data:queryRows}); } 我想首先运行getConenction()和代码; 然后渲染。 我遵循了这个问题的确切解决scheme,但徒劳无功。 连接本身是不确定的; 所以查询返回错误。 我正在使用节点版本8来支持asynchronous和等待; 但是我无法得到结果。

如何用async / await等待child_process.spawn的执行?

我有一个这样的函数,它接受一个命令,参数和一个进程: execPromise (command, args) { return new Promise((resolve, reject) => { const child = spawn(command, args) child.stdout.on('data', (data) => { this.logger.info(`stdout: ${data}`) }) child.stderr.on('data', (data) => { this.logger.info(`stderr: ${data}`) }) child.on('close', (code) => { if (code !== 0) this.logger.error(`Command execution failed with code: ${code}`) else this.logger.info(`Command execution completed with code: ${code}`) resolve() }) }) } […]

如何在JavaScript中等待函数的承诺

在我的Node.js应用程序中,我有一个循环访问URL数组并获取它们的值的函数,一旦循环完成,它将以Map的forms返回最终值。 代码如下。 let getResults = function(urls){ let results = new Map(); let retrievePromises = []; urls.forEach(function (value, i) { retrievePromises.push( restAgent.get(value).then(function(data){ for (let item of data.items) { let name = item.filter(n => n.name === "somename"); //filter array let obj = {}; obj.name = item.name; obj.address = item.address; results.set(name, obj); } }).catch(function(err){ console.log(err); }) ); }); […]

我应该在ES6节点项目中使用多less承诺?

在官方的蓝鸟承诺页面中写道,如果你使用的是node.js,那么我不太可能自己写承诺。 自从我开始一个新项目以来,我发现我所有的代码都围绕着诺言。 例如,我有一个数据库连接器,它返回一个承诺,一个承诺承诺的快速路由,testing承诺,承诺testing承诺,一般我没有写任何接收callback的函数。 我应该写callback模块,如果需要promisify他们? 有什么缺点?