由于我遇到了构造:
var variable = Promise.resolve().then(function(){
//
// do usefull stuff
//
return result;
});
经常使用,因为它似乎与某些相似但又不同的用法有所不同:
var variable = Promise.resolve((function(){
//
// do usefull stuff
//
return result;
})());
,主要是因为我似乎已经使用了它很多次,就像从Promise链开始的那样,是这种更明确的 long-hand <的 short-hand 的缩写。 / em>代码:
var variable = new Promise((resolve) => {
resolve(()=>{
//
// do usefull stuff
//
return result;
});
});
我很高兴知道其他人如何提及它?是一个无极链头(Promise-Chain-Head),还是一个功能至无极链集成器(Function-To-Promise-Chain-Integrator),甚至还有一个名字?
我考虑拥有/知道此结构的名称,有助于将其与第二版单纯的“将参数转换为承诺” Promise.resolve()
结构进行沟通?
奖金: 关于两个初始构造的区别,我认为主要是第二个版本不会像第一个Promise-Chain-Head一样处理统一的“转换为Promise拒绝”的任何错误/异常。
答案 0 :(得分:5)
Promise.resolve().then
没有直接名称,但是此模式通常用Promise.try
表示。
Promise.try
,我们have at bluebird仍然是第1阶段JavaScript提案(意味着它尚未在浏览器中采用或实现)。
您可以将其填充:
if (typeof Promise.try !== 'function') {
Promise.try = {
try(func) {
if (typeof this !== 'function') {
throw new TypeError('Receiver must be a constructor');
}
return new this(function (resolve) {
resolve(func());
});
}
}.try;
}
然后使用它:
Promise.try(() => {
// same as Promise.resolve().then(...
});
或者您可以使用异步功能:
(async () => { // errors here are converted to rejections
})();
自从异步/等待流行以来,由于异步功能自动将抛出的错误转为拒绝,因此这通常不再是一个问题。