【问题标题】:resolved promise returns undefined though it has value已解决的承诺返回 undefined 尽管它具有价值
【发布时间】:2020-04-27 05:39:15
【问题描述】:

我有一个令人沮丧的问题,我找不到它发生的原因

我有一个函数如下:

  public async PageResult(searchRecord:Search,authorization:string,pageNumber:number,databaseName:string){

    some codes .....
    return new Promise((resolve, reject) => {
      this._resultsDatastore.bulkInsert(
        databaseName,
        objects
      ).then(succ => {
        // I can see succ is printed successfully in console
        console.log(succ);
        // when I resolve it here I assume I am returning the result
        resolve(succ)
      }, err => {
        console.log(err);
        reject(err)
      })
    })
  }

如您所见,我解析(成功),这样我将成功返回给调用者函数

现在我有:

 public async loadResults(
    searchId: string,
    authorization: string
  ) {

   some code....
    const results = udsQuery.pages.map(async (pageNumber: number) => await this.PageResult(searchRecord,authorization,pageNumber,databaseName))


    let all: any=[];
    await Promise.all(results).catch(e => {
      console.log("^^^^^^^^^^^^^^^^^^^^^EEEERRRRRROR^^^^^^^^^^^^^^^^^^^^^^");
    }).then(res=>{
      console.log("suuuuuuuuuuuuuuucesssssssssssssss");
      // issue is here: below prints undefined though succ has value 
      console.log(res);
      all.push(res);
      return res;
    });

  }

所以现在我在地图中调用 PageResult 并使用 promis.all 来重新处理它而不是我在 PageResult 中返回的 succ 我得到未定义 请参阅上面代码中的这一部分:

  console.log("suuuuuuuuuuuuuuucesssssssssssssss");
  // issue is here: below prints undefined though succ has value 
  console.log(res);

我错过了什么吗?

【问题讨论】:

  • 当出现拒绝并且.catch(e => { console.log("…ERROR…"); })运行时,您将收到undefined
  • 另外请告诉我们您的确切代码。 return 语句是否嵌套在任何内容中?
  • @Bergi no 即使成功我看到它是未定义的
  • 不,我是说你不应该在该函数的任何地方使用new Promise(…)

标签: node.js promise es6-promise


【解决方案1】:

不知何故,我不喜欢您编写代码的方式,我尝试先修改该代码。我还可以看到另一个错误,您正在执行您的 PageResult() 函数而不是它应该由 Promise.all 块执行。

我没有测试过代码,但它应该是这样的:

 public async PageResult(searchRecord:Search,authorization:string,pageNumber:number,databaseName:string){

        try
        {
            const succ =  await this._resultsDatastore.bulkInsert(
                databaseName,
                objects);
            return succ;
        }
        catch (e)
        {
            throw e;
        }
    }


    public loadResults(searchId: string, authorization: string )
    {   
        const all: any=[];
        const pormises: any=[];
        const results = udsQuery.pages.map((pageNumber: number) =>
            pormises.push(this.PageResult(searchRecord, authorization, pageNumber, databaseName)));

        return new Promise((resolve, reject) =>
        {
            Promise.all(results)
                .then(res=>
                {
                    console.log("suuuuuuuuuuuuuuucesssssssssssssss");
                    // issue is here: below prints undefined though succ has value

                    console.log(res);
                    all.push(res);

                    return resolve(all);
                })
            .catch(e =>
            {
                console.log("^^^^^^^^^^^^^^^^^^^^^EEEERRRRRROR^^^^^^^^^^^^^^^^^^^^^^");
            });
        });

    }

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 2013-05-15
    • 2017-07-18
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多