这个Javascript片段是否有名称“ Promise.resolve()。then(....)”?

时间:2018-10-29 15:41:16

标签: javascript promise terminology

由于我遇到了构造:

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拒绝”的任何错误/异常。

1 个答案:

答案 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

})();

自从异步/等待流行以来,由于异步功能自动将抛出的错误转为拒绝,因此这通常不再是一个问题。