`

node 异步处理操作 promise

    博客分类:
  • node
阅读更多
   nodejs 是非阻塞的,我理解的非阻塞就是前后两个完成不同功能的代码模块,不一定第一个代码模块完成后,第二个代码模块才执行,但是许多时候我们需要控制两个代码的执行顺序,promise能够很好的控制异步操作的先后顺序,他是通过当异步操作完成后执行回调函数实现。

 

使用方法

在package.json中加入

 

'promise':"*"
 执行 npm install 加载 promise 模块

 

在需要的文件中引入模块

 

var Promise = require("promise");
例子

 

 function insertPracticeForGraphics (){
    var self = this;
        return new Promise(function (resolve) {
            var newPractice = new Practice(practice);
            newPractice.save(function () {
                console.log("save practice success");
                resolve(newPractice._id);//执行成功后返回值,只
            });

}

insertPracticeForGraphics()
  .then(function(newPractieId){ // @1
})

   

    resolve(newPractice._id);//执行成功后返回值,如果有多个值的话,可以返回一个对象

    当insertPracticeForGraphics 执行完成后,只执行@1 newPractieId 为 insertPracticeForGraphice返回值

   如果函数3之前需要函数1、2执行完成后执行,且函数1、2的执行先后顺序没有要求可以这样控制

 

function Course() {
}

Course.prototype = {
  start: function() {
        var assignInfo = ['path_0','path_1','path_2']
        var promises   = [];
        var self       = this;
        _(assignInfo).each(function(item) {
            var promise = self.updateCoursesAttrOnPath(item);
            promises.push(promise);
        });
        return Promise.all(promises);
    },

    updateCoursesAttrOnPath: function (item) {
        Path.update({id_name: item.id_name},{$set:{:courses:item.courses}}}, function (err) {
                if (err) {
                    throw err;
                }
                resolve(item.courses);
    }
}

var course = new Course()
course.start()
   .then(function(data_0,data_1,data_2){  //@2
 
   })

   

    当执行start时回执行3次updateCoursesAttrOnPath,传入参数分别为'path_0','path_1','path_2',

他们执行完的顺序不确定,但是他们执行完返回的值顺序固定分别对应 data_0,data_1,data_2;start执行完成后执行@2

 

 

 

 

   

  

 

 

 

分享到:
评论

相关推荐

    node-mysql-promise

    node-mysql-promise 修复异步查询bug版本 Install $ npm i -D git+https://github.com/gofancyever/node-mysql-promise.git Introduction node mysql操作封装类,基于promise,借鉴75team开源项目thinkjs中model操作...

    关于node.js的异步心得

    关于node.js的异步心得**第一种 使用回调函数**第二种 使用Promise第三种还有可以使用**async**函数和**await**关键字cnst fn =async()=>{} 最近刚刚学了node.js 异步篇 先说一下异步的处理流程 下面用代码解释...

    promise-call:调用node-style异步api作为Promise

    承诺电话安装 npm i promise-call用法 var pcall = require('promise-call');pcall(fs.readfile, filename) .then(function(content) { }) .catch(function(error) { });

    node.js Promise对象的使用方法实例分析

    本文实例讲述了node.js Promise对象的使用方法。分享给大家供大家参考,具体如下: Promise对象是干嘛用的? 将异步操作以同步操作的流程表达出来 一、Promise对象的定义 let flag = true; const hello = new ...

    浅谈Node异步编程的机制

    本文介绍了Node异步编程,分享给大家,具体如下: 目前的异步编程主要解决方案有: 事件发布/订阅模式 Promise/Deferred模式 流程控制库 事件发布/订阅模式 Node自身提供了events模块,可以轻松实现事件的发布/...

    node-promise:适用于Node的Promise实用程序

    Promise在异步行为和接口之间提供了明确的关注点分离,因此可以在不使用回调的情况下调用异步函数,并且可以在通用的Promise接口上完成回调交互。 node-promise包仅提供一个promise实现,但是,建议使用以获得更...

    NodeJS中利用Promise来封装异步函数

    在写Node.js的过程中,连续的IO操作可能会导致“金字塔噩梦”,回调函数的多重嵌套让代码变的难以维护,利用CommonJs的Promise来封装异步函数,使用统一的链式API来摆脱多重回调的噩梦。  Node.js提供的非阻塞IO...

    async/await与promise(nodejs中的异步操作问题)

    业内为了处理异步操作问题也是拼了,什么async,q,bluebird,co,处理方式不同,各有千秋,感兴趣可以了解一下,但是惊喜的发现nodejs 7.6已经默认支持ES7中的 async/await 了,结合ES6中的 promise对象,用起来...

    捕获未处理的Promise错误方法

    使用Promise编写异步代码时,使用reject来处理错误。有时,开发者通常会忽略这一点,导致一些错误没有得到处理。例如: function main() { asyncFunc() .then(···) .then(() => console.log('Done!')); } 由于...

    js代码-实现一个简单的Node.js的Web框架利用Promise处理异步中间件

    js代码-实现一个简单的Node.js的Web框架利用Promise处理异步中间件

    Promise支持库Ypromise.zip

    Promise 为开发者提供了一套与异步调用结果交互的机制。 可通过以下方式加载该支持库: 若执行环境未提供对 Promise 的原生支持,可以以脚本的形式来充当原生 API。脚本会添加一个全局的 Promise 构造...

    NodeJS处理Express中异步错误

    比起回调函数,使用 Promise 来处理异步错误要显得优雅许多。 结合 Express 内置的错误处理机制和 Promise 极大地降低产生未捕获错误(uncaught exception)的可能性。 Promise 在ES6中是默认选项。如果使用 Babel ...

    node.js中使用q.js实现api的promise化

    关于啥是promise以及promise解决的是啥问题,敬请体验node的回调异步编码大法,顺带移步http://wiki.commonjs.org/wiki/Promises/A 看看是咋定义的,在此不再赘述。 这里我们看看怎么用q.js 实现node api的promise。...

    javascript异步编程代码书写规范Promise学习笔记

    前端有AJAX,setTimeout等,后端Node异步更多。按照传统的做法,那么就是各种回调嵌回调。代码可以把人绕晕。 这个时候,CommonJS社区提出了一个叫做Promise/A+的规范,这个规范定义了如何书写异步代码,包括使用...

    ndoejs操作my数据库案例.pdf

    在使用 mysql 模块时,开发者们可以采用回调函数或 Promise 等方式来编写异步代码,从而充分利用 Node.js 的异步编程特性,提高代码的执行效率和并发性能。另外,还可以通过连接池等工具库来优化和管理数据库连接,...

    node-treeview:节点的异步文件系统树视图

    节点树视图节点的异步文件系统树视图。Javascript(快速启动)用法const { TreeView } = require ( 'node-treeview' ) ;// Using callbacknew TreeView ( options ) . process ( path , ( error , tree ) => { if ( ...

    node-express-async:通过将未处理的异步中间件错误发送给next()函数来自动处理未处理的异步中间件错误

    节点表达异步通过将未处理的异步中间件错误发送给next()函数来自动处理它们。 这样,您就不需要了,也不会忘记尝试捕获所有中间件以进行默认错误处理。用法您只需要按应用程序一次(仅)请求模块即可,例如在app....

    Node.js 异步编程之 Callback介绍(一)

    Node.js 采用了与通常 Web 上的 JavaScript 异步编程的方式来处理会造成阻塞的I/O操作。在 Node.js 中读取文件、访问数据库、网络请求等等都有可能是异步的。对于 Node.js 新人或者从其他语言背景迁移到 Node.js 上...

    Node.js最新技术栈之Promise篇1

    1. 回调函数Callbacks 1. 异步JavaScript 1. 成器Generators/ yield 1. 每个操作都返回样的promise对象,保证

Global site tag (gtag.js) - Google Analytics