`

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

 

 

 

 

   

  

 

 

 

分享到:
评论

相关推荐

    Nodejs让异步变成同步的方法

    3. Promise:Promise对象代表一个最终可能完成也可能失败的异步操作,提供了一种处理异步操作的标准模式。Promise有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。 下面是使用co库将异步...

    《深入浅出Node.js》:Node异步编程解决方案之事件发布-订阅模式.docx

    在这个例子中,`event1`的回调函数会在当前执行上下文中同步运行,而`event2`的回调则通过`process.nextTick`延迟到下一次事件循环执行,以确保异步操作。 除了事件发布-订阅模式,书中还提到了Promise/Deferred...

    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操作...

    Javascript异步编程模型Promise模式具体介绍_.docx

    例如,以下代码展示了如何使用Promise处理异步Ajax请求: ```javascript $.ajax({ url: "/echo/json/", data: { json: JSON.stringify({ "name": "someValue" }) }, type: "POST" }) .then(function ...

    详解Node.js异步处理的各种写法

    总的来说,Node.js提供了多种处理异步操作的工具,包括回调函数、事件驱动、Promise以及async/await。开发者可以根据项目需求和团队习惯选择最适合的方案。理解并熟练运用这些异步处理技术,对于优化Node.js应用程序...

    Node.js-StuQ分享专题《深入浅出jsNode.js异步流程控制》完整版

    在Node.js中,异步处理主要通过回调函数、事件循环、Promise和async/await等机制实现。 1. **回调函数**:在早期的Node.js开发中,回调是最常见的异步处理方式。当一个操作完成时,会调用预先定义好的函数,以处理...

    异步处理代码

    Promise(承诺)是另一种流行的异步处理模型,它允许多个异步操作按顺序或并行执行,并提供了一种更优雅的方式来管理回调地狱。 在JavaScript中,异步处理广泛应用于Node.js服务器端编程和浏览器端的AJAX请求。使用...

    Node.js连接OpenGauss异步转同步封装

    标题"Node.js连接OpenGauss异步转同步封装"指的是开发者将原本基于异步回调的`pg`模块进行了改造,使其可以像同步操作一样被调用。在Node.js中,异步编程是常态,但有时为了代码的简洁和易读性,开发者可能希望将...

    nodejs异步IO的实现 转:http://cnodejs.org/topic/4f16442ccae1f4aa2700113b

    当一个异步操作开始时,Node.js会将该操作交给操作系统处理,然后返回到事件循环,等待操作完成的通知。一旦操作完成,相应的回调函数会被添加到事件队列中,等待事件循环执行。 以文件读写为例,我们可以使用`fs`...

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

    在Node.js开发中,Promise是处理异步操作的重要工具,特别是在最新的技术栈中。Promise的引入解决了回调地狱问题,使得代码更加清晰、可读性更强。本文将详细讲解Promise/A+规范及其在Node.js中的应用。 首先,让...

    事件驱动异步文件操作

    在Node.js中,文件操作API如`fs.readFile()`和`fs.writeFile()`都是异步的,开发者可以通过回调函数或者Promise来处理异步操作的结果。 5. **回调函数与Promise** 在异步编程中,回调函数是传统处理异步操作结果的...

    Node.js-在Electron应用中捕获未处理的错误和promiserejections

    错误处理是任何应用程序的基础,尤其是在异步编程环境中,如 Node.js 和 Promise。`Node.js-在Electron应用中捕获未处理的错误和promiserejections`这个主题就是关于如何有效地在 Electron 应用中捕获并处理这些潜在...

    文件的IO异步读写操作

    - **Promise**:在JavaScript等语言中,Promise对象用于封装异步操作,提供一种链式调用的处理方式,避免了回调地狱。 - **生成器和协程**:如Python的生成器或C#的async/await,提供了更接近同步代码的异步编程体验...

    前端开源库-node-promise.zip

    "前端开源库-node-promise.zip"这个压缩包文件很可能包含了一个或多个与Promise相关的开源库,这些库可能用于在Node.js环境中增强Promise的功能,提供更高效的异步操作管理。 Promise 对象在 ES6 中被正式引入,它...

    Node.js异步编程

    除了这些基础的异步编程方式,Node.js还提供了一些高级工具,如EventEmitter类,用于实现发布/订阅模式,处理各种事件,如网络连接、文件系统操作等。另外,还有一些库如async、bluebird等,进一步帮助开发者更好地...

    前端开源库-node-promise

    Promise是JavaScript中处理异步操作的重要工具,它代表了一个将来可能完成或者可能失败的任务。在这个库中,kris zyp不仅实现了Promise的基本功能,还增加了一些额外的特性,以满足更复杂的前端开发需求。 在...

    Node.js-axios基于Promise的HTTP客户端用于浏览器和node.js

    axios利用Promise处理HTTP请求的响应,使得开发者可以通过链式调用来组织代码,提高了代码的可读性和可维护性。例如,你可以这样发送一个GET请求: ```javascript axios.get('https://api.example.com') .then...

    前端开源库-stream-promise

    1. **Promise化流**:在浏览器中,由于原生不支持Node.js的Stream API,`stream-promise`通过Promise将流操作转换为更易于理解和使用的异步模式。这使得开发者可以使用`.then()`和`.catch()`来处理流的完成和错误...

    前端开源库-callback-and-promise

    总的来说,回调函数和Promise是前端开发中处理异步操作的重要工具。Promise的出现极大地改善了异步代码的可读性和可维护性,而现代JavaScript和各种库进一步扩展了Promise的功能,让异步编程变得更加便捷和高效。

Global site tag (gtag.js) - Google Analytics