Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型“Promise[]”不可分配给类型“UserrDomain[]”_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 类型“Promise[]”不可分配给类型“UserrDomain[]”

Javascript 类型“Promise[]”不可分配给类型“UserrDomain[]”,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我陷入了异步地狱: 函数转换器到域控制器总线:数组:数组{ //迭代每个DB用户并将其转换为域用户类型 const domainUsers:Array=dbUsers.map异步dbUser:UserDB=>{ //首先将DB用户转换为域用户 const domainUser:UserDomain=newUserDomainModeldbUser; //现在我们需要从数据库中获取他们的用户链接 const dbUserLinks:Array=await findDBUserLinksdbUser

我陷入了异步地狱:

函数转换器到域控制器总线:数组:数组{ //迭代每个DB用户并将其转换为域用户类型 const domainUsers:Array=dbUsers.map异步dbUser:UserDB=>{ //首先将DB用户转换为域用户 const domainUser:UserDomain=newUserDomainModeldbUser; //现在我们需要从数据库中获取他们的用户链接 const dbUserLinks:Array=await findDBUserLinksdbUser.user\u id; //将其用户链接转换为域用户链接 const-domainUserLinks:Array=converttoUserlinks-buserlinks; //现在,将域用户链接调到域用户 domainUser.links=域用户链接; 返回域用户; }; 返回域用户; } 函数newUserDomainModeluser:UserDB:UserDomain{ const domainUser:UserDomain={ 用户名:user.user\u用户名, firstName:user.user\u name\u first, lastName:user.user\u name\u last }; 返回域用户; } 异步函数findDBUserLinksuserId:bigint:Promise{ const dbUserLinks:Array=await getUserLinksuserId; 返回dbUserLinks; } 异步函数getUserLinksid:bigint:Promise{ setDB; 等待client.connect; 常量查询=` 选择 链接(url),, 社会类型id 从用户链接 其中user_id=${id}`; const res=wait client.queryquery; 常量链接:数组=res.rows; 返回承诺链接; } const domainUsers:在convertToDomainUsers函数中发生错误:

TS2322:类型“Promise[]”不可分配给类型“UserDomain[]”。类型“Promise”缺少类型“UserDomain”中的以下属性:用户名、姓氏、姓氏、全名等 添加注释是为了使这篇堆栈文章更容易理解。我通常不写评论,它们都很粗糙。

打电话:

工作执行:


用户端有2个r的UserrDomain是错误的吗?我不知道这是否是真正的问题,但它似乎是错的。@zero298实际上是数组,它是一个承诺数组而不是一个承诺数组。这仍然比。然后回调嵌套6深。@PositiveGuy是的,回调是异步的,这就是它成为承诺数组的原因。请参阅,例如,您不能只等待数组。map returns.wait Promise.alldbUsers.map。。。我想应该这样做,它返回一个承诺数组,而不是一个承诺数组。如果它回报一个承诺,所有人都不会去做。这甚至是您声明的domainUsers,但不是返回类型;这不会通过类型检查。
const domainUsers = await Promise.all(convertToDomainUsers(dbUsers));
function convertToDomainUsers(dbUsers: Array<UserDB>): Array<Promise<UserDomain>> {

  const domainUsers: Array<Promise<UserDomain>> = dbUsers.map( async (dbUser: UserDB) => {

    const domainUser: UserDomain = newUserDomainModel(dbUser);

    const dbUserLinks: Array<UserLinkDB> = await findDBUserLinks(dbUser.user_id);

    const domainUserLinks: Array<UserLinkDomain> = convertToUserLinks(dbUserLinks);

    domainUser.links = domainUserLinks;

    return domainUser;
  });

  return domainUsers;
}