调用async定义的方法,如何处理才能直接返回自己定义的某值,而非promise对象

定义的async方法如下
 
 async codeFilters(code, codeType) {

   let result = "";
   
   //这里进行了一次异步请求的操作,把拿到的数据进行筛选过滤得到自己想要的东西
   await this.getCodeData(codeType).then( data => {
     let res = data.find(item => {
       return item.itemCode == code;
     });
     result = (res ? res.itemName : "");
   });
   
   //在这里return出去
   return result;
 },

情况说明:

//现调用情况:调用后会返回一个Promise对象,只有在then里才能拿到返回的数据
//例:
this.$publicUtils.codeFilters("10", "GGZT").then(res => {
   console.log(res);
});

//现希望返回值不是Promise对象, 直接是我return回来的值。方便我去使用 
let res = this.$publicUtils.codeFilters("10", "GGZT");
console.log(res)

//这样的话我可以 把方法直接丢结构里去渲染 
//例:{{ $publicUtils.codeFilters("10", "GGZT") }}

好人一生平安 ~

已解决 悬赏分:0 - 解决时间 2021-11-28 15:35
反对 0举报 0 收藏 0

回答4

最佳
  • @

    这个救不了,本身就是异步代码,要么then,要么await promise。
    不喜欢then就用await吧(当然,包含下面这句代码的函数前得加async):

    let res = await this.$publicUtils.codeFilters("10", "GGZT");
    
    console.log(res)
    
    支持 0 反对 0 举报
    2021-11-28 08:01
  • @

    aync 的返回值一定是Promise

    但是你可以用 await 直接拿到值:

    let res = await this.$publicUtils.codeFilters("10", "GGZT");
    支持 0 反对 0 举报
    2021-11-28 09:09
  • @

    then()
    用于返回Promise对象成功抛出的数据
    await
    用于等待Promise对象抛出数据,它只能在async函数中使用。
    所以this.$publicUtils.codeFilters("10", "GGZT")本身就是一个Promise对象
    你可以直接将其置于async函数中然后

    console.log(await this.$publicUtils.codeFilters("10", "GGZT"))

    即可

    支持 0 反对 0 举报
    2021-11-28 10:44
  • @

    一旦用了async就已经是一个异步操作了,把异步操作变成同步使用,不可能
    还有 用了await 为啥还用.then()

    支持 0 反对 0 举报
    2021-11-28 11:16