Tag: 承诺

茉莉花testing中蓝鸟的警告承诺

我已经阅读了关于承诺没有从处理程序返回的新的警告,并有一个相关的问题… 在我的一些unit testing中,我将某些依赖关系的function列出,以使用Jasmine的spyOn函数返回promise。 所以,随着这个新的变化,当我的testing运行时,我看到了不less警告。 我当然可以禁用警告,但我想知道是否有改进的方法,我可以使用,自然会摆脱这样的错误? 例: beforeEach(function (done) { var formatter = new Formatter(); var promise = Promise.resolve(['1,000', '2.45']); spyOn(formatter, 'format').and.returnValue(promise); // internally calls formatter.format() doStuff(formatter, [1000, 2.4567]).then(done); // promise is not returned }); 可以添加一个完整的工作plunker,如果这将是有用的?

ExpressJS后端将请求放入队列中

我有客户端发送任务由服务器执行,但这些请求应该像时尚一样处理队列。 任何想法我怎么能做到这一点? 谢谢。 express.Router().post('/tasks', function(req, res){ //This is the task to perform. While being performed, another user //might send a request AND should only be processed when this is done. //This should also flag the pending task if it is completed. Promise.resolve(req.body) .then(function() { //.. }) .catch(function(error) { //…. }) })

如何pipe理多个承诺

我正在编写一个使用node.js的爬虫。 首先,我需要获取主页面来获取该页面上每个项目的URL,然后抓取每个项目的URL以逐一获取它们的详细信息 fetchPage(url)是获取链接的HTML文本 function fetchPage(url){ return new Promise( (resolve,reject)=>{ agent .get(url) .end(function(err,res){ if (err){ reject(err); } else{ resolve(res.text); } }); }); } 这是这个爬虫的全球通话 fetchPage(link).then( (result)=>{ const urls=getUrls(result); for (var i=0;i<5;i++){ fetchItem(urls[i].link).then( (result)=>{ console.log('Done'); }, (error)=>console.log(error) ); } }, (error)=>console.log(error) ); 我处理获取所有项目的URL后获取主页面(通过getUrls ) fetchItem(url)是另一个Promise ,它确保了一个项目的每个HTML文本在被fetchPage后应该通过getItem来处理 function fetchItem(url){ return new Promise( (resolve,reject)=>{ fetchPage(url).then( (result)=>{ getItem(result); }, (error)=>reject(error) […]

使用mongoose的承诺分类文档

当我做console.log(all)我期望找回过滤的sorting数据,而是我回来了整个原始数据。 为什么? var Comp = require("./models/company.js"); var arr = [ {name : "comp1",industry : "industry1", ranking: 20}, {name : "comp2",industry : "industry2", ranking: 5}, {name : "comp3",industry : "industry3", ranking: 10} ] var output = {}; var promise = Comp.find({}).exec() promise.then(function(docs){ return Comp.remove({}).exec() }) promise.then(function(){ console.log("deleted") }) promise.then(function(){ return Comp.create(arr).exec() }) promise.then(function(data){ output.data = data; […]

承诺error handling的基础知识

假设我有这样的代码,假设db.get()是一个promisified API: var promises = []; for( var i = 0; i < 10; i++ ){ promises.push( getFromDatabase("age") ); } Q.all(promises).then(function(results){ // something },function(error){ log.error( error ) }); function getFromDatabase(property){ return db.get(property).then(function(result){ return result; },function(error){ log.error( error ) }) } 谁来处理这个错误? Q.all()的promise链中的函数或者Q.all()的promise链中的函数。 另外,如果在Q.all()有一个顶级error handling程序,是否需要在辅助函数中处理错误?

seleniumwebdriver挂在非常简单的JavaScript代码promise.then

最近我和nodejs&selenium-webdriver经历了一个非常奇怪的错误。 它看起来与nodejs事件循环/ promise / selenium-webdriver相关。 简而言之: webdriver.get调用在使用时会挂起一些promise.then 。 首先,让我们看看一段JavaScript代码,效果很好: const WebDriver = require('selenium-webdriver') var driver = new WebDriver.Builder() .setAlertBehavior('ignore') .forBrowser('chrome') .build() function ok() { console.log('ok: driver.get will open a browser window\n' + '\n' + ok + '\n') driver.get('about:blank') } ok() 这段代码将打开一个浏览器窗口,按预期工作。 但是下面的所有代码都会显示奇怪的行为。 Bug – driver.get会挂起 添加一个虚拟的.then(() => 'test') function bug() { console.log('bug: `driver.get` will hang\n' […]

RxJs如何观察对象属性的变化

我遇到了一个问题。 我有一个客户端,实例化具有布尔属性。 我想等到它切换到真,然后解决承诺。 我尝试了很多不同的方法,包括while循环,只是完全阻塞线程而不检查更新。 这是尝试 var startClient = function() { return new Promise((resolve, reject)=> { var client = CreateClient(); while(!client.ready) {} resolve(client); }); }; 我的问题是:有没有办法使用RxJs帮助..也许发射和事件,如果就绪属性更改? 下面是我想要做的更伪代码。 var startClient = function() { return new Promise((resolve, reject)=> { var client = CreateClient(); var emitter = Observable.watch(client, 'ready'); emitter.on('ready', function(result) { if(result) resolve(client); }); }; 有什么build议么? 谢谢!

创build函数以正确链接promise

我正在努力让Promise链接正确地为我工作。 我相信这个问题归结为理解之间的区别: promise.then(foo).then(bar); 和: promise.then(foo.then(bar)); 在这种情况下,我正在写foo和bar并试图让签名正确。 bar确实是由foo产生的返回值。 我有后者的工作,但我的问题是我需要做些什么来得到前者的工作? 与上面相关的是完整的代码(如下)。 我没有按照期望的顺序打印不同的日志(期待log1 , log2 , log3 , log4 , log5 ,但获取log3 , log4 , log5 , log1 , log2 )。 我希望我能够像上面那样做,我也会得到这个工作的权利。 var Promise = require('bluebird'); function listPages(queryUrl) { var promise = Promise.resolve(); promise = promise .then(parseFeed(queryUrl) .then(function (items) { items.forEach(function (item) { promise = promise.then(processItem(transform(item))) .then(function() { […]

Sequelize – 从数组批量创build

我有一系列的项目,需要创build它们到数据库。 我需要检查每个插入,如果它成功插入到新的数组(结果)项目+成功=真正的JSON。 如果没有成功创build – 插入到相同的数组之前(结果)的项目+成功= false。 代码如下: create_cards: function (filter_id, is_filter, cards) { var result = []; var curr_card = null; for (var card in cards) { curr_card = this.create( { filter_id: filter_id, template: card.template, state: card.state, question_id: card.question_id || -1, answers: card.answers || -1, description: card.description || -1, correct_answer: card.correct_answer || -1 }).then(function(card) { […]

使用Promise保存多个文件

我有一个节点URL(使用Express创build),可用于下载地址的静态图像。 因此,调用应用程序调用/下载url,并使用json传递多个地址,然后下载服务将调用Google Maps,并将每个addreses的静态图像保存在节点服务器上(然后将其发送callback用应用程序,但为了这个问题的目的,我只有在节点服务器保存图像感兴趣)。 最初,我们只关心保存地址的卫星视图,所以我写了这个代码 var request = require('request'); function saveMap(addressJson) { return Promise.all( //iterate over address json, get each address, call the Google Maps URL and save it. addressJson.map(function(item) { return new Promise(function (resolve, reject) { var mapUrl = 'http://maps.googleapis.com/maps/api/staticmap?maptype=roadmap&markers=size:mid|color:red|' + item.address; request(mapUrl) .pipe(fs.createWriteStream('/temp/' + item.id + '.jpg')) .on('finish', function () { resolve("Promise resolved"); }).on('error', […]