由于在微信小程序云数据库操作中,对集合和记录的增删改查返回的都是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。
本文详细介绍了Promise对象在微信小程序云数据库操作中的作用及使用方法,对比了传统回调函数与Promise的写法,展示了如何使用Promise进行数据库的增删改查操作,并解释了Promise.all和Promise.race方法的用途。
822

被折叠的 条评论
为什么被折叠?



