15. Promise 使用场景

Json-server

json-server 是为前端开发人员创建 mock-server 的工具,测试阶段可以用来快速模拟后端请求以及请求回来的过程。

json-server 网址:https://github.com/typicode/json-server

安装 json-server:
安装 json-server

在项目路径开启 json 数据接口服务,看到下图即为成功开启:
开启 json 数据接口服务并访问网址

可以通过控制台上的网址访问接口数据,得到 json 文件中的数据集合/对象:
访问接口数据

访问接口数据

http-server

http-server 是一个简单的零配置命令行 http 服务器。可以用于测试、本地开发和学习。

安装 http-server:
安装 http-server

在项目路径下开启 http 服务器:
开启 http 服务器

开启后网页会自动打开:
自动打开的网页

案例 - 调用多个数据接口

db.json

{
  "users": [
    {
      "id": 1,
      "username": "小明",
      "age": 18,
      "job": 2
    },
    {
      "id": 2,
      "username": "小红",
      "age": 18,
      "job": 4
    },
    {
      "id": 3,
      "username": "小亮",
      "age": 18,
      "job": 1
    },
    {
      "id": 4,
      "username": "小张",
      "age": 18,
      "job": 3
    }
  ],
  "jobs": [
    {
      "id": 1,
      "name": "学生"
    },
    {
      "id": 2,
      "name": "老师"
    },
    {
      "id": 3,
      "name": "画家"
    },
    {
      "id": 4,
      "name": "演员"
    }
  ]
}

db.json 文件中有定义了两个成员,将该文件通过 json-server 开启数据接口服务后,可以通过 http://127.0.0.1:3000/users 获取用户数据,和 http://127.0.0.1:3000/jobs 获取职业信息。由于需要请求多个接口数据,代码必然会存在嵌套调用产生的回调地狱问题:


    
案例页面效果

自定义封装 Promise 实现案例

为了解决上述案例中的回调地狱的问题,我们尝试自己封装 Promise 来解决:




    
    Ducument


    

使用 Jquery 实现案例

其实 Jquery 实现了 Promise 功能,使用 Jquery 同样可以达到同样的效果:




    
    Ducument


    

Mongoose 案例

Mongoose 所有API 支持 promise。例如以下的用户注册问题,注册需要判断用户是否存在,如果存在结束注册,如果不存在,注册:

var mongoose = require('mongoose')
var Schema = mongoose.Schema
mongoose.connect('mongodb://localhost/itcast')
var userSchema = new Schema({
  username: {
    type: String,
    required: true // 必须有
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String
  }
})
var User = mongoose.model('User', userSchema)

User.findOne({ 
  username: 'aaa' 
})
  .then(function (user) {
    if (user) {
    console.log('用户已存在')
    } else {
      return new User({
        username: 'aaa'
        password: '123'
        emial: '[email protected]'
      }).save()
    }
  })
  .then(function (ret) {
    // 继续...
  })

你可能感兴趣的:(15. Promise 使用场景)