Promise <T>的TypeScript参数,为什么不承诺<T1,T2>?
我想知道为什么Promise<T>
不需要两个参数,如下所示: Promise<T1,T2>
。
例如:
new Promise(function(resolve,reject){ ... err ? reject(err) : resolve(val); });
=>🌷🌷🌷如何告诉消费者关于err 和 val两种types的承诺? 🌷🌷🌷
我希望T1
是Error
types, T2
是val
的types。
为什么不承诺采取两个types的参数? 因为它正式只有一个,我假设参数是传递给resolve()
的值的types? 是否只有一个参数,因为我们期望一个Error
types总是被传递给reject()
?
进一步的细节,我们可以传递一个string来拒绝:
new Promise(function(resolve,reject){ let err = 'just a string, not an object'; let val = {foo:'bar'}; err ? reject(err) : resolve(val); });
请注意,我们可以将错误强制为某种types ,如下所示:
return function(){ return Promise.resolve('whatever') .catch(function(){ return Promise.reject('always a string'); }); }
所以这个错误可能永远是any
事情都不是真的吗? 好像我们知道在上面的例子中错误将是一个string…
由于reject参数的types为(reason? : any) => void
您无法指定拒绝原因的types。
至于为什么这样input,最可能的主要原因是@Titian给的。 任何在代码中抛出一些东西的东西都会被承诺所吸引,并将承诺链作为错误传播出去。 给它一个types可能会使用户认为它应该只期望一个特定的types,而它可能真的是任何东西。
主要针对这样的情况:
let x = new Promise<string>((resolve, reject) => { let rnd = Math.random(); if (rnd < 0.3) { resolve('yeey works'); } else if (rnd < 0.6) { reject('boo I dont like this number'); } else { crash(); } }); x.then(console.log).catch(console.log); function crash() { throw new DOMException(); }
- 不太了解Q诺库
- Promise findOneAsync variable = {“isFulfilled”:false,“isRejected”:false}?
- 节点JS – 处理多个查询(承诺,蓝鸟)
- Youtube API,NodeJS和Promise问题
- 这是一个承诺错误? 提交成功login后,Selenium-webdrivertesting无法find元素
- forEach Loop中的asynchronousfindOne()操作
- 我如何处理承诺的错误?
- 如何使用promise在Javascript中发生exception后重试?
- Mongoose with Bluebird promisifyAll – 对模型对象的saveAsync结果作为已解决的承诺值