Tag: es6 promise

使用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'); }); 需要修改哪些内容才能完成“所有任务”。 […]

如何处理承诺,因为他们解决?

目前,这个代码打印出一个零,因为数组中的第一个承诺立即解决。 const promises = []; const promiser = (number) => new Promise((resolve, reject) => window.setTimeout(() => resolve(number), number * 100)); for (let index = 0; index < 10; index++) { const promise = promiser(index); promises.push(promise); } Promise.race(promises).then(r => console.debug(r)); 我期待这样做,以便一旦最快的承诺解决,它是从promises数组中删除和一个新的Promise.race调用剩下的承诺,重复,直到没有承诺离开。 由于Promise.race返回的是承诺的结果,而不是解决的承诺本身,但是,我无法确定哪个承诺是解决的,我不知道哪一个从数组中删除。 有没有办法知道这个? 我想我可以用某种相关键和结果返回一个复杂的对象,但这似乎很奇怪。 我希望Promise.racecallback的第二个参数将是承诺的索引,但事实并非如此,因为then只是另一个承诺的一个,所以它怎么会知道它应该无论如何返回一些索引。 你能想出更好的办法吗? 而且,我在第一race执行了所有的承诺,但是这对后来的race来说应该不成问题,对吗? 如果在接下来的race之前另一个承诺解决了,那么应该把它退还,没问题,对吗? 如果同时有多个承诺解决,它只会返回第一个(按照数组顺序或按照分辨率顺序?),然后下一个race将返回第二个,依此类推…对吗? 顺便说一句,我也尽pipe我可以走arrays,并删除已经isResolved承诺,但这不是一个真实的事情。 即使是这样,但是对于race诉求之间的多重承诺解决的情况来说,这完全是race 。

防止吞咽错误的ES6承诺(不使用.catch)

我不想为每个使用的承诺input.catch。 没有做这个承诺所造成的错误是极其无益的。 纯粹为了这个目的而使用像蓝鸟这样的整个库让我感到不舒服。

用recursion函数使用promise

我试图找出是否有可能在recursion函数中使用promise而不是标准callback。 我现在的方式是: function recursive(data, cb){ (function promiseProvider(data){ return newThenable(data).then(function(val){ if(val.a){ cb(null, val); } else { return promiseProvider(val); } }); })(data); } 这工作,但我不知道我怎么可以做一个纯粹的承诺实现。 也许这会工作? function recursive(data){ return newThenable(data).then(function(val){ if(val.a){ return // <<< ??? } else { return recursive(val); } }); } 大声笑没有这不工作…

在我请求之前如何不运行一个承诺

我以为我已经知道了关于Promise的一切,但是这个实际上让我起床了。 当用一个执行器创build一个新的Promise时需要两个参数,为什么这个方法在我接受then()或catch()之前就运行了 运行节点6.2.2。 import assert = require('assert'); describe("When working with promises", () => { let ar = [1, 2, 3, 4, 5, 6]; beforeEach(() => { }) it("should be perfectly fine but isn't when mapping to promises", (done) => { ar.map(num => { return new Promise((resolve, reject) => { done(new Error('Why on earth is ' […]

Node.jspipe道http请求&承诺

我使用一个Node.js 请求模块来发出一个http请求,并且想把响应传递给一些stream。 这里有两个代码段: 一个正常工作的例子 。 我只是响应response事件。 const fs = require('fs') const path = require('path') const request = require('request') const filepath = path.resolve('./tmp.zip') const ws = fs.createWriteStream(filepath) function get() { return new Promise((resolve, reject) => { request.get(uri, options) .on('response', (res) => { ws.on('finish', () => console.log('finish')) res.pipe(ws) resolve() }) .on('error', (err) => { reject(err) }) }) […]

我如何链接承诺连续运行摩卡集成testing?

我想testing两个或更多的承诺,如集成testing,他们应该顺序运行。 示例显然是错误的,因为我仅从以前的testing(电子邮件)获取用户属性。 请注意,我在这里使用了chai-as-promise,但是如果有更简单的解决scheme,我不需要。 userStore返回一个承诺,我可以解决它,如果它只有一个class轮在其他testing没有问题。 it.only('find a user and update him',()=>{ let user=userStore.find('testUser1'); return user.should.eventually.have.property('email','testUser1@email.com') .then((user)=>{ user.location='austin,texas,usa'; userStore.save(user).should.eventually.have.property('location','austin,texas,usa'); }); }); 如果我使用return Promise.all那么不能保证按顺序运行吗?

TypeScript es6-promise,我如何匹配Promise构造函数

尝试这个: init():Promise<mongodb.Db> { return new Promise<mongodb.Db>((resolve : (value?: R | Thenable<R>) => void, reject: (error?: any) => void) => { this.db = new mongodb.Db("test", new mongodb.Server("localhost", 12017)); this.db.open((err, db) => { if (err) { reject(err); } else { resolve(db); } }); }); } 给我这个: error TS2351: Cannot use 'new' with an expression whose type lacks […]

如果文件存在,则在Nodejs中移动文件,否则创build文件

我试图将文件从位置abc移动到位置xyz如果该文件已经存在位置xyz删除它,然后保存新的。 这是我的代码 const promises = { deleteFile: path => { return new Promise((resolve, reject) => { const fs = require('fs'); fs.stat(path, (err, stat) => { if (err === null) { fs.unlink(path, err => { if (err) { return reject(err) } resolve(); }) } else if(err.code == 'ENOENT') { console.log('File does not exist'); resolve(); } else […]

使用node.js和本地promise来构build堆栈跟踪

我们有一个明确的API应用程序,我们利用ES6的原生承诺。 我们目前的设置为简单的获取将是 //controller.js snippet get: function (req, res, next) { repository.getObject() .then(function (response) { return res.status(200).json(response); }).catch(function (err) { return next(err); }); } //repository.js snippet getObject:function(){ return new Promise(function (resolve, reject) { var sql = SELECT * FROM table; db.query(sql, function (err, result) { if (err) return reject(err); return resolve(result.rows)); }); }); } //app.js snippet […]