Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Typescript 错误承诺。all()属性不可分配给参数_Typescript_Promise_Google Cloud Functions - Fatal编程技术网

Typescript 错误承诺。all()属性不可分配给参数

Typescript 错误承诺。all()属性不可分配给参数,typescript,promise,google-cloud-functions,Typescript,Promise,Google Cloud Functions,我很难做出一系列承诺。我有下面的云函数 export const updateUser = functions.region('europe-west1').https.onCall(async(data, context) => { const userID : string = Authentication.authenticate(context); Validator.validateString('displayName', data['displayName']

我很难做出一系列承诺。我有下面的云函数

export const updateUser = functions.region('europe-west1').https.onCall(async(data, context) => {
    const userID : string = Authentication.authenticate(context);
    Validator.validateString('displayName', data['displayName']);
    Validator.validateString('photoURL', data['photoURL']);

    const userInfo = {
        displayName:data['displayName'],
        photoURL:data['photoURL'],
    };

    const userReference = await firestore.collection('users').doc(userID);
    const promises = [];
    promises.push(admin.auth().updateUser(userID, {displayName:userInfo.displayName, photoURL:userInfo.photoURL}));
    promises.push(userReference.update(userInfo));
    await Promise.all<admin.auth.UserRecord, FirebaseFirestore.WriteResult>(promises);
});
export const updateUser=functions.region('europe-west1').https.onCall(异步(数据,上下文)=>{
const userID:string=Authentication.authenticate(上下文);
Validator.validateString('displayName',data['displayName']);
Validator.validateString('photoURL',data['photoURL']);
常量用户信息={
displayName:data['displayName'],
photoURL:data['photoURL'],
};
const userReference=wait firestore.collection('users').doc(userID);
常量承诺=[];
promises.push(admin.auth().updateUser(userID,{displayName:userInfo.displayName,photoURL:userInfo.photoURL}));
promises.push(userReference.update(userInfo));
等待承诺。所有(承诺);
});
但是
Promise.all(承诺)给出以下错误

Argument of type '(Promise<WriteResult> | Promise<UserRecord>)[]' is not assignable to parameter of type 'readonly [UserRecord | PromiseLike<UserRecord>, WriteResult | PromiseLike<WriteResult>]'.
  Type '(Promise<WriteResult> | Promise<UserRecord>)[]' is missing the following properties from type 'readonly [UserRecord | PromiseLike<UserRecord>, WriteResult | PromiseLike<WriteResult>]': 0, 1ts(2345)
类型为“(Promise | Promise)[]”的
参数不能分配给类型为“readonly[UserRecord | PromiseLike,WriteResult | PromiseLike]”的参数。
类型“(Promise | Promise)[]”缺少类型“readonly[UserRecord | PromiseLike,WriteResult | PromiseLike]”中的以下属性:0,1ts(2345)

但是为什么呢?我符合承诺的回报类型。我做错了什么?

在您将承诺类型推入
承诺
数组后,这些承诺类型似乎丢失了,该数组本质上是非类型化的(在TypeScript中,没有类型意味着
任何

在您的具体案例中,这些承诺的类型甚至无关紧要,因为除了将它们返回给调用方之外,您没有对它们做任何事情。可调用函数将自动序列化它们并将它们发送回客户端。我建议完全放弃这些类型,写下以下内容:

return Promise.all(promises)
请注意,您实际上必须
返回
承诺。你不能只是等待它。否则,客户端将不会收到任何值

如果希望保留类型,则应避免将其推入非类型化数组中,如下所示:

const p1 = admin.auth().updateUser(userID, {displayName:userInfo.displayName, photoURL:userInfo.photoURL}));
const p2 = userReference.update(userInfo));
return Promise.all<admin.auth.UserRecord, FirebaseFirestore.WriteResult>([p1, p2]);
const p1=admin.auth().updateUser(userID,{displayName:userInfo.displayName,photoURL:userInfo.photoURL});
constp2=userReference.update(userInfo));
返回承诺。所有([p1,p2]);