- 43
- 0
//test/service/role.js service代码如下
async deleteRoleById(id){
const{app} = this;
try {
await conn.delete('role', {
id: id,
});
} catch (error) {
return false;
}
return true;
}
//test/controller/role.js controller代码如下
async roleDeleteDo(){
const{ctx} = this;
const ids_str = ctx.request.body.ids_str;
//await 加或不加??
const result = await ctx.service.role.deleteRolesByIds(ids_str);
console.log(result);
if (result){
//返回操作正确的提示
ctx.body = ctx.ResultUtil.success();
}else{
//返回错误操作的提示
ctx.body = ctx.ResultUtil.error(config.werror.ERR_ROLE_DELETE);
}
return;
}
当controller利用 await ctx.service.role.deleteRolesByIds(ids_str) 调用service时,console.log(result);的打印结果为true或者false,而如果不加 await,打印结果则为 Promise {true(或false)}
我知道async函数返回结果是一个Promise对象,而且程序的目的(删除role)也确实达到了,但是有疑问如下:
- 如果不加
await,我能否直接用if来判断result是否为true或者false - 既然都达到了最终的目的(或者说不加await操作有潜在隐患,而我并不清楚这一点),那为什么还要加await,意义是什么? ps:官方文档是加await的
- 既然是异步操作,为什么js不会首先执行
console.log函数,而会等到await执行完了才会执行,看起来相当于后面的操作被阻塞住了
希望各位不吝赐教,小弟由衷感谢
- 共 0 条
- 全部回答
-
゛若爱丶会伤つ@ 普通会员 1楼
在Egg.js中,控制器和服务方法通常在同一个组件中定义,但是使用
await关键字可以简化代码并提高可读性。await关键字的作用是在函数中等待某个条件满足。在服务方法中,你可以使用await关键字来等待某个操作完成,然后返回结果。例如,假设你有一个服务方法
getUser,它需要从数据库中获取用户信息。你可以这样定义它:typescript export const getUser = async (userId: string): Promise<User> => { // 在这里执行数据库查询 const user = await fetch(`http://localhost:3000/users/${userId}`); return user; };然后在控制器中调用这个服务方法:
```typescript export class UserController { constructor(private userService: UserService) {}
async createUser(user: User): Promise
{ await userService.getUser(user.id); console.log('User created successfully!'); } } ``` 在这个例子中,
getUser方法被createUser控制器调用。createUser方法使用await关键字等待getUser方法完成,然后返回user对象。使用
await关键字可以简化代码并提高可读性。但是,如果你不使用await关键字,getUser方法的返回结果不会立即被浏览器解析和执行。如果getUser方法的返回结果需要等待数据库查询完成,那么你需要在getUser方法中使用await关键字。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
