javascript - 解析一个使用 Promise 的函数

标签 javascript node.js typescript promise

我有以下异步函数

export default async function getUserNames(id: string[]): Promise<string[]> {
    let userNames: string[] = [];
    // We do some stuff here like calling a service, etc...

    return userNames;
}

在不同的 typescript 文件中,我正在导入 getuserNames 函数并尝试像这样调用它:

const promiseResult = getUserNames(idList)
        .then(result => {
            return result;
        })
        .catch(error => {
            return undefined;
        });

    if (promiseResult) {
        // Do something else here.
    }

但是,promiseResult 类型是 Promise 而不是我所期望的 string[]。我如何调用 getuserNames 函数并在完成后将实际的字符串 [] 返回给 promiseResult 变量?

编辑 可以接受做这样的事情吗?

let varB: string[];
const promiseResult = getUserNames(idList)
        .then(result => {
            varB = result;
        })
        .catch(error => {
            varB = undefined;
        });

if (varB) {
        // Do something else here.
    }

最后,请注意调用 getUserNames 的函数未定义为异步,我无法更改它。

最佳答案

如果您想访问 promise 解析的值,您唯一的选择是

1) 使用 promise 的 .then 回调

getUserNames(idList)
  .then(result => {
    // Do something else here.
  })

2) 将代码放在异步函数中并使用 await 关键字:

async function someFunction () {
  const result = await getUserNames(idList);
  // Do something else here.
}

请注意,由于所有异步函数都返回 promise ,因此在此示例中,someFunction 将返回一个 promise 。

关于javascript - 解析一个使用 Promise 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382802/

相关文章:

javascript - 如何在不改变内部div位置的情况下换行多个div

javascript - 哪个JS框架可以像DB一样存储数据?

javascript - 在 node.js 中获取模块的名称

javascript - Node.JS 不同的异步链如何毫无问题地改变共享变量?

javascript - 如何制作灯泡菜单?

javascript - 使用 javascript 将 byteArray 转换为 IntegerArray

javascript - 在 node.js 中导出函数的结果

node.js - 如何卸载安装在错误目录中的 Node 模块文件夹 (Mac)?

json - 直接访问 JSON 对象属性并记录它

typescript - 如何将对象键的值映射到 TypeScript 中的同一对象?