Articles of 承诺

使用Node-MySQL时,ES6承诺运行不正常

为什么这一系列的承诺失灵? 运行时未定义最终.then块中的“对象”对象。 new Promise(function(resolve, reject) { getConnection().query("SELECT * FROM blog", (err, rows) => { if (err) reject(err) else resolve(rows) }) }).then(rows => { let posts = [] for (let i = 0; i < rows.length; i++) { posts.push({ id: rows[i].id, … }) } return posts }).then(posts => { getConnection().query("SELECT * FROM shows", (err, rows) => […]

从KOA中间件内的承诺中调用yield

我正在编写一个KOA中间件,以便从mongo中提取用户信息,如果它没有被caching的话。 我收到以下错误: “this.getUser”函​​数返回一个ES6承诺,如果没有使用请求caching,则从mongo获取用户,或创build一个新的匿名用户。 module.exports = function* securityMiddleware(next) { this.getUser(this.request) .then((user)=>{ if(user.isAonymous){ //throw 401 access error }else{ yield next; } }); }; 这是无效的,因为:jshint说生成器必须有一个yield并抛出一个SyntaxError:意外的严格模式保留字。 你如何在KOA中间件生成器中使用promise? 我正在使用KOA v1.2.0。

以同步方式获取Javascript Promise的值

我需要以同步方式获得Javascript Promise对象的值。 我知道它是如何工作在Javascript中的Promise对象及其优点,以及如何使用then方法处理值,但是有用例,特别是Node.js(但也可以应用于浏览器引擎),在你需要的地方仅返回值,但是您调用的是返回Promise对象的API,而且不能更改该API的签名或使用者API。 例如,在Java语言中,您有get()方法,它允许您在必要时等待以完成操作(阻止执行),然后返回结果。 即使你有一个get(timeout,unit)的最大时间来等待,如果等待超时发射TimeoutException之前等待。 我遇到的问题是这样的: api1.setCallBackThatHasToReturnANoPromiseValue( function(p1, p2) { return api2.getPromisedValue(p1,p2) // This returns a Promise .get() // -> but something like this // could get the value in a sync way } ); 有人可以告诉我,如果我可以用asynchronous编程解决这个问题吗? 不pipe我的具体问题可以用asynchronous代码解决,有一种方法可以同步的方式获得Promise的价值(我知道它会阻止执行和所有的性能问题,请避免“bla bla”。 ..“ )。

承诺结合stream

我想逐行阅读大文件并将数据插入到数据库存储中。 我functon返回一个Promise内部创buildstream,并解决它时,事件stream.on('end')被调用,但它不是我真的想要,因为在stream.on('data')它产生Promise.map() ,并且我想确定在resolve()调用之前完成的所有插入操作。 在这种情况下我怎样才能产生正确的链条? var loadFromFile = (options) => new Promise(function (resolve, reject) { let stream = fs.createReadStream(options.filePath, { flags: 'r', }); stream.on('data', (chunk) => { /* process data chunk to string Array */ Promise.map(lines, (line) => { /* process and insert each line here */ }) .catch((err)=>{ reject(err); }); }); stream.on('end', () => { […]

为什么node.js生成器不能按预期工作?

给定以下两个代码片断,为什么事务对象在工作案例中可见,但在另一个案例中不可见? 工作案例: return db.transaction(function(transaction) { return co(function*() { // transaction is visible, do something with it -> works } } 不是工作案例: var c = co(function*() { // transaction is NOT visible -> does not work! }); return db.transaction(function(transaction) { return c; }); 是否有可能在第二种情况下使交易可见?

不要等待所有的承诺来解决

我需要并行获取数据,然后用Node.js同时计算它们。 所以我使用promise.all,但它performance奇怪。 当我第一次启动它时,计算时间更长,并且在第一个承诺解决之后就失败了,即使其他人成功了。 当我第二次启动它时,速度更快,因为所有数据都存储在数据库中,所以成功了。 我真的不明白。 这是我的代码: var Promise = require('promise'); /* The list of objects */ var ingrd_list = JSON.parse(req.body.ingrd_list); /* func.addFood is my function to apply on. It takes a callback parameter as last parameter */ var pAddFood = Promise.denodeify(func.addFood); var pArray = []; ingrd_list.forEach(function(ingrd){ var my_p = pAddFood(ingrd); pArray.push(my_p); }); Promise.all(pArray).then(function(){ console.log("success !"); […]

nodejs then()函数在promiseparsing之前执行

我有一个使Promise按预期工作的问题。 我需要做以下事情: 我从stdout中获取文件名,将它们分割成一行并复制它们。 当复制操作完成后,我想开始其他操作,这是我的问题。 我已经在Promise中创build了一个复制函数,万一出现错误,我立即拒绝它,如果没有错误,我在循环完成后解决它,但由于某种原因,在复制操作完成之前, var lines = stdout.split(/\r?\n/); copyUpdatedFiles(lines).then( function() { console.log('this one should be executed after copy operation'); } ); function copyUpdatedFiles(lines) { return new Promise(function(resolve, reject) { for (var i = 0; i < linesLength; i++) { fs.copy(lines[i], target, function(err) { if (err) { reject(); } }); } resolve(); }); } 请帮助,因为我明显失去了一些东西。

在MySQL上使用Promise进行并行插入查询失败

我写了一个在Node.js中并行运行插入查询的代码,我也使用Promise.js。 但代码失败并引发“重复主键”条目的例外。 代码如下, var Promise = require("promise"); var mySql = require("mysql"); var _ = require("underscore"); var connection = mySql.createConnection({ host : "localhost", user : "root", password : "rahul", database : "testDb" //schema }); connection.connect(); function insertDept(name){ return new Promise(fn); function fn(resolve,reject){ getMaxDept().then(function(rows){ var deptId = rows[0]["DeptId"]; deptId = (_.isNull(deptId) === true) ? 125 : deptId; […]

在一个承诺里面callback里面

我知道,stackoverflow充满了类似的问题,我读了很多。 从我得到的承诺中throw应该拒绝它,因为我可以在文档中阅读: 如果执行者抛出一个exception,它的值将被传递给拒绝parsing函数。 但即使阅读了许多关于承诺的post后,我仍然不明白我正在粘贴的代码片段以及为什么会发生这种情况。 function foo(a, b, cb) { setTimeout(() => { cb('Inner error *!?"$%&#@"'); }, 0); } const getThePromise = () => { return new Promise((resolve, reject) => { const cb = (err) => { /* >>> ************ */ throw err; // catch not called // reject(err); // catch called /* ************ <<< */ […]

nodejs如何在其他文件中使用promise输出并修改它,然后返回它的值

我的代码如下所示: this.xmlObjectRepositoryLoader = function (xmlPath){ var innerMap = {}; var elementName; var filePath = xmlPath+'.xml' var self = this return new Promise( function(resolve, reject){ console.log("In xmlObjectRepositoryLoader : "+filePath) self.readFilePromisified(filePath) .then(text => { var doc = domparser.parseFromString(text,"text/xml"); var elements = doc.getElementsByTagName("Element"); for(var i =0 ; i< elements.length;i++){ var elm = elements[i]; elementName = elm.getAttribute("name"); var params […]