`

node.js中promise的一个使用小例子

阅读更多

今天做一个项目,展现一个页面需要从服务器请求两次数据,太繁琐了,今天用promise规范了一下,只需要从服务器发送一次数据即可实现。

需要发送的数据:

我在controller中写了如下代码:

OrderForm = require('../models/OrderForm.js');
Person = require('../models/Person.js');

function OrderForm(){

}

OrderForm.save = function(req,res){
    OrderForm.save(req.body.name,req.body.restaurant,req.body.meal,req.body.price)
};
var get_person = new Promise(function(resolve,reject){
    Person.getAll()
        .then(function(name){
            console.log(name)
            resolve(name)
        })
});
var get_order_list = new Promise(function(resolve,reject){
    OrderForm.statics.getAll()
        .then(function(list){
            console.log(list)
            resolve(list)
        })
});

OrderForm.getAll = function(req,res){
    Promise.all([get_person,get_order_list]).then(function(result){res.send(result)});

};

module.exports = OrderForm;

 

需要说一下的是最后的result存入了之前promise中resolve的信息,打印出来是这个样子的:

可以看到放到了一个数组里,取的时候:

function show_order_list() {
    $.when($.ajax({
        url:"get_meal_list",
        type:"GET",
        dataType:"json",
        success:function(data){
            var meal_list = [];
            var name_list = [];
            data[1].forEach(function(list) {
                meal_list.push(list);
                var meal = {name: list.list, restaurant: list.restaurant, meal: list.meal, price: list.price};
                localStorage.setItem('meal_list', JSON.stringify(meal_list));
            });
            data[0].forEach(function (name) {
                if (name_list.indexOf(name.list) == -1) {
                    name_list.push(name.list);
                    localStorage.removeItem('all_people_list');
                    localStorage.setItem('all_people_list', JSON.stringify(name_list));
                }
            })
        }
    })).then(function(){show_lists()});
}

  分别用[0]和[1]就ok了

分享到:
评论

相关推荐

    Node.js入门经典源代码

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个"Node.js入门经典源代码"压缩包文件显然包含了用于学习和理解Node.js基础知识和实践的源代码示例。以下是...

    Node.js快速学习入门

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行开发,极大地推动了全栈开发的流行。本教程旨在为初学者提供一个快速学习 Node.js 的入口,帮助你从零开始...

    Node.js - How To Code in Node.js

    通常,第一个程序都是“Hello World”程序,通过这个简单的例子,你可以了解 Node.js 的基本语法结构和执行流程。具体步骤包括创建一个新的 JavaScript 文件,编写代码,保存文件,然后使用命令行工具运行该文件。 ...

    Node.js-tvcl一个简单的终端电视节目追踪

    总的来说,tvcl项目是一个实践Node.js命令行工具开发的好例子,它展示了如何利用Node.js的特性来构建高效、便捷的工具。通过学习和实现类似项目,开发者可以深化对Node.js的理解,提升自己的全栈开发能力。

    Node.js-非阻塞PostgreSQL的node.js客户端

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。非阻塞I/O是Node.js的核心特性之一,它利用事件驱动、非阻塞I/O模型,使得 Node.js 可以高效地处理...

    Node.JS入门.docx

    Node.js 是一个基于 JavaScript 的服务器端 runtime 环境,它允许开发者使用 JavaScript 语言来编写服务器端代码。 Node.js 的出现改变了传统的服务器端开发方式,使得开发者可以使用同一语言编写客户端和服务器端...

    node.js入门手册

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个"node.js入门手册"很可能包含了以下一系列关键知识点: 1. **基础概念**:Node.js的基础概念包括事件...

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

    在这个例子中,`someAsyncOperation()`返回一个Promise,然后我们通过`.then`和`.catch`来处理异步操作的结果。这种方式不仅易于理解,而且可以方便地在链中传递结果或错误。 Promise/A+规范还规定了错误处理。在...

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

    首先,要从Node.js调用Python,我们需要一个中间桥梁。这个桥梁通常是由第三方库提供的,比如`child_process`模块(Node.js内置)或者`python-shell`库。`child_process`允许我们直接执行Python脚本并捕获其输出,而...

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

    当Node.js启动时,会创建一个事件循环,每个I/O事件发生时,该事件会被放入相应的队列中,然后事件循环会依次处理这些事件,直到队列清空。 Node.js的设计哲学十分注重性能和效率,这背后也离不开C++和JavaScript的...

    最新版nodeJs

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够使用 JavaScript 脚本语言在服务器端进行编程。这个“最新版NodeJs”指的是 Node.js 的一个更新版本,可能是为了提供更好的性能、修复已知...

    如何将Node.js中的回调转换为Promise

    为了将Node.js中的回调转换为Promise,我们需要创建一个新的Promise实例,并在回调函数中分别处理成功和失败的情况。例如,我们可以这样将`fs.readFile()`转换为Promise: ```javascript function readFilePromise...

    Node.js异步编程

    在这个例子中,`readFile`函数接受一个回调函数作为参数,当文件读取完成后,这个回调函数会被调用。 随着ES6的推广,Promise被引入到JavaScript中,它提供了更优雅的错误处理和链式调用。例如,使用Promise改写...

    node.js参考手册

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者在服务器端使用 JavaScript 进行编程,极大地推动了全栈开发的流行。本参考手册旨在全面介绍 Node.js 的核心概念、模块系统、网络编程、文件...

    使用ES2017异步函数的node.js表达中间件.zip

    在Node.js开发中,ES2017引入的异步函数是解决回调地狱问题的一个重要进步,它使得异步编程更加简洁和易于理解。在这个"使用ES2017异步函数的node.js表达中间件"的主题中,我们将深入探讨异步函数在Node.js中的应用...

    nodejs案例

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

    Node.js-SpliderApi基于nodejs的爬虫API接口项目

    **Node.js-SpiderApi基于Node.js的爬虫API接口项目**...通过以上分析,我们可以看出这个项目不仅涵盖了Node.js的基础应用,还涉及到网络爬虫、API设计、数据处理等多个领域,是学习和实践Node.js全栈开发的一个好例子。

    Node.js-async-await-nodejs的启动库

    这个“Node.js-async-await-nodejs的启动库”可能是一个帮助开发者快速上手并理解如何在Node.js项目中使用`async/await`的资源包。 首先,我们要理解`async/await`的基础概念。`async`关键字用于定义一个异步函数,...

    jpromise:使用netty实现node.js的Promise的Java实现

    Netty将其实现为和但是node.js将Promise视为只读对象。 和DeferredObject为可写。 它遵循node.js的概念。 JPromise与非常相似。 主要区别在于它使用netty的promise实现。 它使JPromise能够选择将在其中执行回调的...

    Node.js-listr-终端任务列表

    【Node.js-listr-终端任务列表】是一款基于Node.js的命令行工具,它允许开发者创建交互式的任务列表,这些任务可以在终端中...对于那些需要在终端中执行多步骤流程的Node.js项目,Listr无疑是一个值得考虑的解决方案。

Global site tag (gtag.js) - Google Analytics