这个 Javascript 片段 "Promise.resolve().then(....)" 有名称吗?

Is there a name for this Javascript snippet "Promise.resolve().then(....)"?

自从我遇到构造:

var variable = Promise.resolve().then(function(){
    //
    // do usefull stuff
    //
    return result;
});

经常和,因为它似乎与一些相似但不同的东西有一些不同的用法:

var variable = Promise.resolve((function(){
    //
    // do usefull stuff
    //
    return result;
})());

主要是因为我觉得它经常被使用,有点像 Promise-chain-started,有点像 速记 这个更明确的 长手 码:

var variable = new Promise((resolve) => { 
    resolve(()=>{
        // 
        // do usefull stuff
        //
        return result;
    }); 
});

我很想知道其他人是怎么说的?它被称为 Promise-Chain-Head,或者 Function-To-Promise-Chain-Integrator,或者甚至有一个名字?

我认为 having/knowing 这个构造的名称,有助于传达它与单纯 "Convert Argument To Promise" Promise.resolve() 构造的第二个版本的区别?

奖金: 关于两个初始构造的差异,我认为主要是第二个版本不会像第一个 Promise-Chain-Head 那样处理统一 "transform to Promise rejects" 中的任何 Errors/Exceptions。

Promise.resolve().then 没有直接名称,但此模式通常用 Promise.try 表示。

Promise.try which we have at bluebird 仍然是第 1 阶段 JavaScript 提案(意味着它尚未在浏览器中采用或实施)。

你可以用 polyfill:

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

})();

自从 async/await 变得流行以来,这通常不再是一个问题,因为异步函数会自动将抛出的错误转换为拒绝。