目录
1.什么是Promise
Promise是一种用于异步编程的模式,它提供了一种优雅的方式来处理异步操作的结果,避免了回调地狱问题。在Promise中,每一个Promise对象都有一个状态,该状态可以是fulfilled(已解决)或rejected(已拒绝)。
2.Promise中的基本概念
- Promise:一个Promise对象代表一个异步操作的结果,它可以是fulfilled或rejected。
- Resolve:通过
resolve
方法将Promise对象设置为fulfilled状态。 - Reject:通过
reject
方法将Promise对象设置为rejected状态。 - Then:在fulfilled状态下,可以执行一系列的操作,这些操作会随着异步结果的返回而执行。
- Catch:在rejected状态下,可以捕获和处理异步操作的错误。
3.理解Promise
我觉得官方其实对于Promise的解释已经足够清楚了,但作为一个 ‘四谷牧抗议四囧比哦’ ,这里还是举个例子解释一下Promise
如果你好奇过,就会发现Promise翻译为中文其实是承诺的意思,既然如此,我们就可以把Promise想象成一种“未来的承诺”。
假设你在网上订购了一本书,商家给你一个承诺,说书会在三天内送到。在这三天里,你不会一直站在门口等着快递员,而是继续你的日常生活。当书到了,快递员会按门铃通知你(then),这时你就可以去收书了。如果书没有按时送达(catch),商家也会通知你延迟的原因。
在编程中,Promise 就像是商家对你的承诺。当你发起一个异步操作,比如网络请求,你不会让整个程序停下来等待结果,而是继续执行其他代码。Promise 会记住这个请求,并在操作完成后(无论是成功还是失败)通知你结果。如果请求成功,Promise 会调用一个成功的回调函数;如果请求失败,则会调用一个失败的回调函数。
总而言之,言而总之。
Promise 是一种优雅地处理异步操作的方式,它让你的程序可以“承诺”在将来某个时刻完成某个操作,并在操作完成时通知你,无论结果是好是坏。
4.Promise的重要方法
Promise对象提供了几个重要的方法:
- then(onFulfilled, onRejected): 这个方法注册了两个回调函数,分别在Promise变为Fulfilled或Rejected状态时调用。onFulfilled和onRejected分别是成功和失败的回调函数,但onRejected是可选的。如果没有提供onRejected,并且Promise被拒绝,那么.then()方法会抛出一个错误,导致链式调用中断。
- catch(onRejected): 这个方法只注册一个失败的回调函数,相当于.then(undefined, onRejected)。
- finally(onFinally): 这个方法注册一个回调函数,无论Promise最终是被解决还是被拒绝,都会执行这个函数。
Promise对象还可以通过.all()和.race()静态方法组合多个Promise,其中.all()等待所有Promise都完成,而.race()则返回第一个完成的Promise的结果。
Promise的设计目的是为了简化异步编程模型,提供比传统的回调函数更清晰、更强大的错误处理和链式调用能力。
5.实战
使用Promise去封装一个Splite
首先做前期准备
private dbName:string = 'shop_car.db'
private dbSecurityLevel:relationalStore.SecurityLevel = relationalStore.SecurityLevel.S1
private mRdbStory : relationalStore.RdbStore = null
private mTableName : string = ''
接下来就是数据库三大步
初始化,创表,增删改查
初始化
initRdb(dbName?:string,level?:relationalStore.SecurityLevel):Promise<void>{
let ctx:Context = getContext(this) as Context
let storeConfig:relationalStore.StoreConfig = {
name : dbName? dbName : this.dbName,
securityLevel : level ? level : this.dbSecurityLevel
}
return new Promise((resolve:Function,reject:Function)=>{
relationalStore.getRdbStore(ctx,storeConfig).then((rdbStore:relationalStore.RdbStore)=>{
this.mRdbStory = rdbStore
resolve()
}).catch(()=>{
reject(new Error(`${this.dbName}数据库初始化失败!!`))
})
})
}
创表
createTable(tableName:string,sql:string):Promise<void>{
this.mTableName = tableName
return new Promise((resolve:Function,reject:Function)=>{
if(this.mRdbStory){
console.debug('----------create table-----------')
this.mRdbStory.executeSql(sql).then(()=>{
resolve()
}).catch(()=>{
reject(new Error(`${this.mTableName}表创建失败!!`))
})
}
})
}
增删改查
//3.插入数据
insertData(values:relationalStore.ValuesBucket):Promise<number>{
return new Promise((resolve:Function,reject:Function)=>{
if(this.mRdbStory){
console.debug('----------insert data-----------')
this.mRdbStory.insert(this.mTableName,values).then((num)=>{
resolve(num)
}).catch(()=>{
reject(new Error(`${this.mTableName}表插入数据失败!!`))
})
}
})
}
//4.查询数据
queryData(predicates:relationalStore.RdbPredicates,columns:Array<string>):Promise<relationalStore.ResultSet>{
return new Promise((resolve:Function,reject:Function)=>{
if(this.mRdbStory){
console.debug('----------query data-----------')
this.mRdbStory.query(predicates,columns).then((resultSet:relationalStore.ResultSet)=>{
resolve(resultSet)
}).catch(()=>{
reject(new Error(`${this.mTableName}表查询数据失败!!`))
})
}
})
}
//5.删除数据
deleteData(predicates:relationalStore.RdbPredicates):Promise<number>{
return new Promise((resolve:Function,reject:Function)=>{
if(this.mRdbStory){
console.debug('----------delete data-----------')
this.mRdbStory.delete(predicates).then((num)=>{
resolve(num)
}).catch(()=>{
reject(new Error(`${this.mTableName}表删除数据失败!!`))
})
}
})
}
//6.更新数据
updateData(values:relationalStore.ValuesBucket,predicates:relationalStore.RdbPredicates):Promise<number>{
return new Promise((resolve:Function,reject:Function)=>{
if(this.mRdbStory){
console.debug('----------update data-----------')
this.mRdbStory.update(values,predicates).then((num)=>{
resolve(num)
}).catch(()=>{
reject(new Error(`${this.mTableName}表更新数据失败!!`))
})
}
})
}
如此一来,大功告成。
标签:Function,ArkTs,resolve,relationalStore,Sqlite,Promise,reject,new From: https://blog.csdn.net/chen2023_11_14/article/details/140690503