`

node.js下promise的两种常见用法

阅读更多

最近做工程遇到一个问题:从数据库取出数据后不能有效的传到前台,用了两种解决办法callback回掉函数和promise方法,这里说一下自己对promise的理解。

promise主要用于控制函数按照自己的计划进行下去,以免造成有操作等延迟时不能得到想要的结果。

常见用法一:

var mysql = require("./db");

function Person(){

}

Person.getAll = function() {
  return new Promise(function (resolve,reject) {
    mysql.query('select*from person', function (err, rows) {
      resolve(rows);
    })
  })
};

module.exports = Person;

 

Person = require('../models/Person.js');
function NameController(){

}

NameController.getAll = function(req,res){
    Person.getAll()
        .then(function(list){
            res.send(list)
        })
};

module.exports = NameController;

 这是两个js文件,通过路由连接到一起,实现了由promise控制取数据。主要需要注意的是第一个函数return和resolve的内容还有第二个函数Person.getAll()的承接,括号不要落掉。

补充:可以后续链接多个.then,函数会按照顺序执行

         .catch是承接出错时的操作的。

常见用法二:Promise.all

OrderFormController.get_person_list = function(){
   return new Promise(function(resolve,reject){
        Person.getAll()
            .then(function(name){
                resolve(name);
            })
            .catch(function(error){
                console.log("get_person_list error")
            })
   });
};
OrderFormController.get_order_list = function(){
    return new Promise(function(resolve,reject){
        OrderForm.statics.getAll()
            .then(function(list){
                resolve(list);
            })
            .catch(function(error){
                console.log("get_order_list error")
            })
    });
};

OrderFormController.getAll = function(req,res){
    var get_person_list = OrderFormController.get_person_list();
    var get_order_list = OrderFormController.get_order_list();
    Promise.all([get_person_list,get_order_list])
        .then(function(order_information){
            res.send(order_information)
        });
};

 

这儿promise.all用于有多个promise同时完成时才能进行下一步的情况,多个函数取出的值会自动被整合到一个数组中,我的代码是整合到了order_infomation中,其中order_infomation[0]是第一个,order_infomation[1]是第二个。

 

node.js4.0以上版本就自带promise了,不用引用

 

分享到:
评论

相关推荐

    Node.js-git-js一个轻量级接口用于在任何node.js应用程序中运行git命令

    5. **异步/同步API**:Git-js提供了异步和同步两种API,适应不同的场景需求,开发者可以根据实际情况选择合适的方式。 ### 使用Git-js的步骤 1. **安装**:通过npm(Node.js包管理器)安装Git-js,命令行输入`npm ...

    Node.js-better-sqlite3是Node.js中最快和最简单的SQLite3库

    1. **Node.js**: Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,允许开发者在服务器端使用JavaScript编写高性能的应用程序。 2. **SQLite3**: SQLite3是一种开源的、无服务器、零配置、事务性的SQL数据库...

    Node.js - How To Code in Node.js

    本章将探讨异步编程的概念,包括回调函数、Promise 和 async/await 的使用方法。 #### 八、如何使用 Mocha 和 Assert 测试 Node.js 模块 随着项目规模的增长,编写测试变得尤为重要。Mocha 是一个流行的测试框架,...

    Node.js-PyNode-从node.js调用python代码

    在IT行业中,Node.js和Python是两种非常流行的编程语言,分别在不同的领域有着广泛的应用。Node.js以其非阻塞I/O模型和JavaScript的便捷性在Web开发中占据了一席之地,而Python则以其强大的科学计算、数据分析以及...

    Node.js.zip

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行开发,打破了JavaScript只能在浏览器端使用的限制。这个压缩包“Node.js.zip”包含了两本非常重要的学习资源——...

    深入理解Node.js:核心思想与源码分析

    Node.js作为一款流行且广泛使用的服务器端JavaScript运行环境,其核心思想和架构设计对开发者而言至关重要。本文将从Node.js的架构设计、核心模块实现、以及源码分析等层面进行深入探讨。 首先,我们需要了解Node....

    Node.js-调试指南.pdf

    Tick Processor 是 Node.js 中的一种性能优化技术,能够帮助开发者更好地了解程序的性能瓶颈。Tick Processor 分为两个部分:事件驱动和 Tick 处理器。事件驱动负责将事件分配给对应的处理器,而 Tick 处理器则负责...

    vue.js+node.js毕业设计.zip

    Vue.js和Node.js是两种非常流行的开源技术,广泛应用于现代Web开发。Vue.js是一个轻量级的前端JavaScript框架,而Node.js则是一个基于Chrome V8引擎的JavaScript运行环境,常用于构建后端服务。这份“vue.js+node.js...

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

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

    nodejs使用手册

    总的来说,Node.js使用手册涵盖了Node.js的核心概念、API使用方法以及最佳实践,无论你是初学者还是有经验的开发者,都能从中受益。通过深入学习和实践,你可以利用Node.js开发高性能的Web应用、实时通信系统、工具...

    Node.js-del-使用globs删除文件和文件夹

    异步方法使用Promise,这在处理可能耗时的文件操作时非常重要,因为它不会阻塞Node.js事件循环。 3. **安全删除**: `del`库确保了删除操作的安全性。它会在执行删除前检查路径,防止误删。此外,它还提供` dryRun`...

    mysql和node.js整合学习,其中有 squence 和 node.js的orm框架,两个 orm框架的学习.zip

    在这个“mysql和node.js整合学习”资料中,我们将探讨如何将这两种技术结合,特别是在使用ORM(对象关系映射)框架时的方法。 ORM框架允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL语句。它在...

    Node.js-start-超级简单的任务Runner基于复合函数和promise链接

    在本文中,我们将深入探讨如何使用Node.js创建一个超级简单的任务Runner,该Runner基于复合函数和Promise链。这个任务Runner的目的是帮助开发者更高效地组织和执行一系列异步操作,这是Node.js开发中的常见需求。在...

    nodejs案例

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地推动了全栈开发的进程。本案例聚焦于 Node.js 的实际应用,通过源码下载,我们可以深入理解其...

    Node.js-ftpfs一个ftp客户端暴露nodefsAPI

    2. **异步与同步操作**:FTPFS支持异步和同步两种操作模式,通过在方法后添加`Sync`(如`readdirSync`)来执行同步操作,或者使用回调函数或Promise(对于ES6以上版本)进行异步操作。 3. **流式处理**:FTPFS也...

    Node.js-async-ratelimiter让速率限制变得简单轻松异步基于ratelimiter实现

    这两种算法都是网络流量整形和拥塞控制中的常见方法。 7. **使用示例**:通常,开发者会创建一个限速器实例,设置每秒或每分钟允许的请求数量,然后在处理每个请求之前调用限速器的方法。如果请求被允许,该方法会...

    理解 Node.js 事件驱动机制的原理

    实际上,很多现代的Node.js模块都支持使用回调函数和Promise两种方式来处理异步操作。例如,在fs模块中,除了可以使用fs.readFile这样的回调风格函数外,还可以使用fs.promises命名空间下的方法来以Promise的方式...

    Node.js-HealthyManAndComic一个爬取健康内容的项目

    Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,以其异步、非阻塞I/O模型和高性能特性,在Web开发领域占据了一席之地。本篇文章将深入探讨如何利用Node.js进行网络爬虫的开发,以"HealthyManAndComic"项目...

    在Node.js中用法Javascript Generators详解_.docx

    JavaScript Generators 是 JavaScript 语言中的一种特性,它们在 Node.js 中尤其有用,因为它们能够帮助开发者处理复杂的异步流程控制。Generator 函数是一种特殊的函数,它们可以暂停执行并在稍后恢复,这使得它们...

    详解在Node.js中发起HTTP请求的5种方法

    在Node.js中发起HTTP请求是Web开发中一项基本而重要的技能,这篇文章介绍了五种在Node.js环境下发起HTTP请求的方法,这些方法不仅涵盖了Node.js内置模块,还包括了流行第三方库的使用方式。 首先,标准库中的HTTP...

Global site tag (gtag.js) - Google Analytics