【问题标题】:Using promise inside an async function without async/await?在没有异步/等待的异步函数中使用承诺?
【发布时间】:2021-09-23 08:19:44
【问题描述】:

我有一个异步/等待功能。我应该如何重写它以保持异步但不使用异步/等待?我想使用promises,但是当我想重写这段代码时,它不起作用......:/

    fruit = 'apple';
    data: any = {};
      constructor(private http: HttpClient, private storage: Storage) {
      }
    
      async function(ex: string): Promise<{}> {
        ex = ex ? ex : await this.storage.get('ex');
        return new Promise<{}>((resolve) => {
          const path = `./exam/${ex || 'apple'}.json`;
          this.fruit = ex;
          this.storage.set('ex', this.fruit );
          this.http.get<{}>(path).subscribe(
            transition => {
              this.data = Object.assign({}, transition || {});
              return resolve(this.data);
            },
            () => {
              this.data = {};
              return resolve(this.data);
            }
          );
        });
      }
    
      get(): string {
        return this.fruit;
      }
    }

【问题讨论】:

    标签: angular asynchronous async-await promise


    【解决方案1】:

    async/await 是 Promise 之上的语法糖,提供了一种以同步方式处理异步任务的方法。如果可行,您可以尝试一下:

    async function(ex: string): Promise<{}> {
      ex = ex ? ex : await this.storage.get('ex');
        const path = `./exam/${ex || 'apple'}.json`;
        this.fruit = ex;
        this.storage.set('ex', this.fruit );
        try {
          const result = await this.http.get<{}>(path).toPromise();
          this.data = Object.assign({}, result || {});
          return this.data
        } catch (error) {
           console.log(`An error occured ${error}`);
        }
      
    }
    

    注意:使用 async/await 或 then/catch 总是好的。

    【讨论】:

    • 我试过这个解决方案,但是没有用。
    • 你有没有得到任何错误?首先,您如何调用此函数,因为它没有命名?
    • 我将函数命名为currentUse,然后在组件中我这样称呼它:this.fruitService.currentlyUse(this.fruit),我没有得到错误,但不幸的是我仍然得到空值,模板没有显示值。我是不是调用错函数了?
    • 您确定从服务中获取数据吗?为什么不在函数中放一个调试器,看看它是如何获取数据并返回的呢?
    • 我做到了,问题出在this.fruit = ex; this.storage.set('ex', this.fruit);这两行。当我有 this.fruit = ex 时,我仍然有一个值,但是当我转到下一条语句时,我得到一个空值并且不知道为什么
    猜你喜欢
    • 2018-02-03
    • 2017-06-15
    • 1970-01-01
    • 2020-03-05
    • 2020-03-26
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多