Articles of 承诺

承诺 – 在Promise中捕获所有的拒绝。所有

我有这个虚拟代码 var Promise = require('bluebird') function rej1(){ return new Promise.reject(new Error('rej1')); } function rej2() { return new Promise.reject(new Error('rej2')); } function rej3() { return new Promise.reject(new Error('rej3')); } Promise.all([rej1(),rej2(),rej3()] ).then(function(){ console.log('haha') },function(e){ console.error(e); }) 在拒绝处理程序中,我只看到第一个拒绝。 是否有可能查看所有三个拒绝?

promise链里面的返回值没有被调用

我正在使用承诺库蓝鸟,我目前正在运行的问题,该函数内的一切运行良好,但当我尝试返回一个值,该函数返回undefined 。 这是承诺链: function foo() { createGroupMembers(parsedChat).then(function(val) { var members = val; createMessages(parsedChat, maxPages).then(function(val) { var messages = val; Promise.all([ createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)]) .then(function (results) { var front = results[0]; var stats = results[1]; var backcover = results[2]; var book = head + front + stats + members + messages + backcover; […]

不会捕获从mongoose承诺的callback函数抛出的错误

我花了太多时间试图弄清楚为什么我的express.js控制器没有响应一个简单的查询,并且发现从一个Mongoose-promisecallback触发的运行时错误正在默默地中断callback过程。 这里是我的代码的简化版本: server.get('/api/test', function (req, res, next) { User.find({}).exec().then(function success(users){ console.log('SUCCESS'); typo[0] = 1; // throws a runtime error res.json(users); }, function error(err){ console.log('ERROR'); res.json({error: err}); }); }); 这导致SUCCESS在我的控制台显示,但没有任何反应。 没有给予用户的回应,我的错误造成的错误没有出现在我的控制台,错误callback也不会被调用。 我知道一个人不应该从callback函数中抛出exception,但是在这种情况下,这只是一个错字,而且当我这样做的时候,我会被警告(比如标准输出中的堆栈跟踪)的错误。 (毕竟我们是人类) 在你看来,当承诺callback中出现这种错误时,获得反馈的最佳方式是什么?

诺言。 resolve()和resolve()之间的区别是什么?

在某处阅读这个例子: return new Promise( (resolve, reject) => { fs.readFile(file, (err, data) => { if (err) reject(err) return resolve(data) }) }) 但我通常这样做: return new Promise( (resolve, reject) => { fs.readFile(file, (err, data) => { if (err) reject(err) resolve(data) }) }) 有没有区别?

在节点js失败后,重试自己承诺

我想重申我的要求。 我想启动我的刷新,如果我总是有401错误作为循环:(如果我有401循环刷新,直到200) 我试过这个: const request = require('request'); let conf = require('../conf'); let core_service = require('coreService'); let self = module.exports = { get_count_questions: function() { return new Promise((resolve, reject) => { request({ method: 'GET', uri: 'http://api/count-questions', auth: { 'bearer': conf.token }, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { […]

node.js + request => node.js + bluebird +请求

我试图了解如何用promise来编写代码。 检查我的代码PLZ。 这是对的? Node.js +请求: request(url, function (error, response, body) { if (!error && response.statusCode == 200) { var jsonpData = body; var json; try { json = JSON.parse(jsonpData); } catch (e) { var startPos = jsonpData.indexOf('({'); var endPos = jsonpData.indexOf('})'); var jsonString = jsonpData.substring(startPos+1, endPos+1); json = JSON.parse(jsonString); } callback(null, json); } else { […]

nodejs – 如何promisify http.request? 拒绝被叫了两次

我试图把http.request包装到Promise : new Promise(function(resolve, reject) { var req = http.request({ host: '127.0.0.1', port: 4000, method: 'GET', path: '/api/v1/service' }, function(res) { if (res.statusCode < 200 || res.statusCode >= 300) { // First reject reject(new Error('statusCode=' + res.statusCode)); return; } var body = []; res.on('data', function(chunk) { body.push(chunk); }); res.on('end', function() { try { body = […]

得到第一个履行的承诺

如果我有两个承诺A和B,其中只有一个承诺会成功,我怎样才能获得成功的承诺? 我正在寻找类似于Promise.race东西,但是它只会返回满足的第一个承诺。 我正在使用ES6的承诺。

如何从嵌套的诺言中返回值?

我在Redis中有一组电影ID: [1,2,3,4]和一组具有实际数据的哈希值。 现在,我想一次获取所有ID的电影数据。 我正在尝试使用蓝鸟promisses,但我卡住了。 到目前为止,我有: 函数allMovies(){ var电影,movieIds; 返回client.smembersAsync('movies.ids')。then(function(ids){ movieIds = ids; movies = _.map(movieIds,function(id){ var电影; return client.hmgetAsync(“movies:”+ id,'title','description','director','year')。done(function(data){ 电影=数据; 返回{ 标题:data [0], 描述:data [1], 导演:资料[2], 年份:数据[3] }; }); 返回电影; }); }) 问题出在我所尝试的方面,我总是得到一个新的承诺,而所有的操作完成后,我只是对JSON感兴趣。 这里的任何人都可以解释一下这个问题?

使用node.js,stream和承诺下载文件

这是我的代码片段: var processListing = function (directoryItems) { console.log('foreach'); var itemsToDownload = []; directoryItems.forEach(function (element, index, array) { //Ignore directories if (element.type === 'd') { console.log('directory ' + element.name); return; } //Ignore non zips if (path.extname(element.name) !== '.zip') { console.log('ignoring ' + element.name); return; } //Download zip itemsToDownload.push({ source: element.name, destination: element.name }); //aftpSystem.downloadFile(element.name, element.name); }); […]