我尝试记录Promise.all结果,因为一旦我对数据进行了结构分解,类型就会丢失。
这里是一个例子,(我试图把它放在一个闭包中)
const promiseAll = () => {
return Promise.all([
this.b2bCompanies.getCompany(companyId, token),
this.b2BFacade.getProfile(profileId, token),
]);
};
const [company, profile] = await promiseAll();
原始代码是:
const [company, profile] = await Promise.all([
this.b2bCompanies.getCompany(companyId, token),
this.b2BFacade.getProfile(profileId, token),
]);
公司和个人资料变为*
,但是this.b2bCompanies.getCompany
返回CompanySchema
,个人资料称为ProfileSchema
有什么主意,我该如何做到这一点并保持正确键入的代码?
谢谢:)
答案 0 :(得分:0)
ES6 externs for Closure Compiler以此方式定义Promise.all;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
* @param {!Iterable<VALUE>} iterable
* @return {!Promise<!Array<RESULT>>}
* @template VALUE
* @template RESULT := mapunion(VALUE, (V) =>
* cond(isUnknown(V),
* unknown(),
* cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),
* templateTypeOf(V, 0),
* cond(sub(V, 'Thenable'), unknown(), V))))
* =:
*/
Promise.all = function(iterable) {};
虽然我认为以这种方式定义它会起作用,但我想知道您是否可以只包括这些外部元素?当然,只有在使用Closure Compiler时才有意义。