Tag: 承诺

我的承诺的成功块总是执行,即使当我返回一个404

当用户使用不正确的电子邮件和密码login时,即使服务器返回了400,客户端承诺的成功块仍然会执行。 我正在使用Redux和React,所以我打电话给使用axios调用HTTP请求的动作创build器。 我需要帮助,理解为什么我没有正确处理错误,因为我的应用程序的其余部分的身份validationfunction,如注册,注销等,都performance出相同的方式,即使我从服务器返回400状态。 这里是我从我的组件调用login,成功块总是执行: handleFormSubmit({ email, password }) { this.props.loginUser({ email, password }).then(() => { toastr.success("You are logged in!"); }).catch(() => { toastr.warning("Could not log in"); }) } 这里是动作创build者“loginUser”,当我从服务器返回400时,该函数的成功块不会运行: export function loginUser({ email, password }) { return function(dispatch) { return axios.post(`/users/login`, { email, password }) .then(response => { dispatch({ type: AUTH_USER }); localStorage.setItem('token', response.headers['x-auth']); browserHistory.push('/feature'); […]

停止承诺链多个捕获

在Node.js中,我需要读取一个文件并validation它的内容,所有内容都是asynchronous的。 我使用Node.js 6.6 , 蓝鸟3.4.6 示例代码: // pseudo function to read file contents – resolves when 'flag' is true, rejects when 'flag' is false. function readFile(flag) { return new Promise(function (resolve, reject) { console.log('Reading file…'); if (flag) { resolve('File contents'); } else { reject('readFile error'); } }); } // pseudo function to validate file contents […]

从承诺中的callback中检索数据?

我现在有以下一段代码: const Promise = require('bluebird'); const readFile = Promise.promisify(fs.readFile); recordPerfMetrics: function(url) { var self = this; var perf, loadTime, domInteractive, firstPaint; var perfData = {}; readFile('urls.txt', 'UTF-8').then(function (urls, err) { if (err) { return console.log(err); } var urls = urls.split("\n"); urls.shift(); urls.forEach(function(url) { console.log(url); self.getStats(url).then(function(data) { data = data[0]; loadTime = (data.loadEventEnd – data.navigationStart)/1000 + […]

如何在Node.js中添加promise.all在循环中searchfindOrCreate?

我在续集中创build了两个模型。 我得到了一系列的结果“用户”,并通过循环来获取或创build新的“房间”基于User.id。 我想打印完所有的房间。 我在控制台中得到了空数组,因为它是不同步的。 如何在创build所有房间后调用console.log? var Users = sequelize.import(__dirname + "/../models/own/user"); var Rooms = sequelize.import(__dirname + "/../models/own/room"); var _this = this; this.users = []; this.rooms = []; Users.findAll().then(function(users) { _this.users = users; users.forEach(function(user){ Rooms.findOrCreate({where: {user_id: user.get('id')}}) .spread(function(room, created) { _this.rooms.push( room.get({ plain: true }) ); }); }); console.log(_this.rooms) });

从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) => […]

在我返回res.end()之后,Promise仍然会进入下一个链。

我在express中使用bluebird,当我返回res.end(),Promise仍然进入下一个链,这里是我的代码: Promise.resolve(operate).then(function(data){ if (!!data && data.length !=0) { log.info('success'); return true; }else { log.warn('fail'); return res.end(); } }).then(function(data){ if(data) { log.info('done'); return res.end(); }else { log.warn('fail'); return res.end(); } }) 如果失败,我会在日志中得到2个“失败”,如果我在第一次失败,我该如何停止?谢谢! 蓝鸟版本:〜2.10.2; 节点:4.3.1; 快递:〜4.2.0

用promise来返回一个recursion函数

我想要一个function,将页面通过一个端点来获取所有的联系人。 现在我的诺言只是返回我不明白的数字2。 我想要它返回所有的联系人。 这是我目前的代码。 我希望有人能帮助我理解如何正确地返回联系人数组。 function getContacts(vid,key){ return axios.get('https://api.hubapi.com/contacts/v1/lists/all/contacts/all?hapikey=' + key + '&vidOffset=' + vid) .then(response =>{ //console.log(response.data['has-more']) //console.log(response.data['vid-offset']) if (response.data['has-more']){ contacts.push(getContacts(response.data['vid-offset'],key)) if(vid === 0){ return contacts.push(response.data.contacts) }else{ return response.data.contacts } }else{ //console.log(contacts) return response.data.contacts } }) }

迭代数组并等待promise

我怎样才能迭代通过使用承诺和返回数据的数据数组? 我已经看到了一些promises.push(asyncFunc)方法,但是我的数组中的一些条目将会失败,所以从我收集的内容中我不能使用它。 var filesFromDisk = [ '41679_4_2015-09-06_17-02-12.mp4', '41679_4_2015-09-06_17-02-12.smil', '41680_4_2015-09-09_10-44-05.mp4' ]; start(filesFromDisk) .then((data) => { console.log(data); // Want my data here }); 我从另一个文件开始start(dbFiles) ,这就是为什么我想要返回的数据。 function start(dbFiles) { var listOfFiles = [], promises = []; return new Promise((fulfill, reject) => { for (var i = 0; i < dbFiles.length; i++) { getMp4(dbFiles[i]) .then((data) => { listOfFiles = […]

callback地狱,厄运金字塔,node.js

我是node的新手,在完成我的API之后,我意识到所有这些都是一团糟,而且是一个callback地狱,这迫使我学习promise,现在一切都好,直到我面对一个有更多条件的API比可能的function,我的问题是如何做嵌套承诺,我的代码是关于一个父对象有一个用户附加到它,当删除路由被称为有很多条件: 如果这个家长有附加的孩子,它不应该被删除 没有孩子 一个。 此父母在多个学校中,school_id从父对象的学校id和附属于其的用户对象中移除 湾 如果这个家长没有孩子,只有在school_id,它应该被删除,用户连接也应该被删除 代码看起来像这样,它是100%的function router.post('/delete',Validation, function (req, res) { var school_id = req.body.schoolId; var parent_id = req.body.selected[0]; / Student.findOne({parent_ids:parent_id},function(err,parentF){ if(err){ console.log(err); res.json({status:"error",message:"an error occurred"}); return }else if(parentF){ res.json({status:"error", message:"you can not delete a parent who has students associated with it"}); return; }else{ Parent.findOne({_id:parent_id},function(err,parent){ if(err){ console.log(err); res.json({status:"error",message:"an error occurred"}); return; }else{ if(parent.school_id.length>1){ […]

使用蓝鸟承诺,如何解决与延期的反模式?

我正在学习蓝鸟承诺,我正试图学习不再使用任何延期()。 下面的代码正确运行100%并按预期运行。 但是,这里是对我重构代码的练习,以便正确使用Bluebird承诺,而不是使用Deferred解决scheme。 我试图学会以不同的方式(正确地)对Promise进行思考,但经过多次尝试,我仍然无法find如何在没有 Deferreds的帮助下解决这个特定问题的方法。 有没有人有一个想法? 这里是如何运行它: 1)在你的控制台运行这个程序。 它将启动将使用端口8080的websocket服务器。 2)然后在另一个控制台窗口中再次运行它。 那个将启动并使用端口8081 3端口8080失败后使用端口8081。 // Initialization stuff const WebSocket = require('ws'); var wsServer; // Main Program // ================================================================= tryCreateWebsocket().then( function(){ console.log("Websocket succesfully initialized."); }, function(){ console.log("Websocket startup has failed!"); } ); // ================================================================= // Helper function: Creating a websocket, with a port as parameter function createWebsocket(port){ return […]