Promise对象简单了解

本文详细介绍了Promise对象在微信小程序云数据库操作中的作用及使用方法,对比了传统回调函数与Promise的写法,展示了如何使用Promise进行数据库的增删改查操作,并解释了Promise.all和Promise.race方法的用途。

由于在微信小程序云数据库操作中,对集合和记录的增删改查返回的都是Promise对象,所以有必要了解下Promise对象的的用法。

Promise 对象是 JavaScript 的异步操作解决方案,Promise 可以让异步操作写起来,就像在写同步操作的流程,而不必一层层地嵌套回调函数。

Promise 的最终结果只有两种。

// 传统写法
step1(function (value1) {
  step2(value1, function(value2) {
    step3(value2, function(value3) {
      step4(value3, function(value4) {
        // ...
      });
    });
  });
});

// Promise 的写法
(new Promise(step1))
  .then(step2)
  .then(step3)
  .then(step4);

Promise 的用法,简单说就是一句话:使用then方法添加回调函数。Promise 的优点在于,让回调函数变成了规范的链式写法,程序流程可以看得很清楚。

操作数据库实例:

Promise 风格

db.collection('test').add({
  // data 字段表示需新增的 JSON 数据
  data: {
    description: "learn cloud database"
  }
})
.then(res => {
  console.log(res)
})
.catch(console.error)

兼容支持 Callback 风格

db.collection('todos').add({
  data: {
    description: "learn cloud database",
  },
  success: function(res) {
    // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
    console.log(res)
  },
  fail: console.error,
  complete: console.log
})

Promise.all方法,Promise.race方法

Promise.all 和Promise.race 方法都是用于将多个 Promise 实例,包装成一个新的 Promise 实例。他们的区别暂不考虑

var p = Promise.all([p1,p2,p3]);

上面代码中,Promise.all 方法接受一个数组作为参数,p1、p2、p3 都是 Promise 对象的实例。(Promise.all 方法的参数不一定是数组,但是必须具有 iterator 接口,且返回的每个成员都是 Promise 实例。)

在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组,它包含所有的传入迭代参数对象的值(也包括非 promise 值)。

  • 异步操作成功,Promise 实例传回一个值(value),状态变为fulfilled

  • 异步操作失败,Promise 实例抛出一个错误(error),状态变为rejected

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值