这个 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 变得流行以来,这通常不再是一个问题,因为异步函数会自动将抛出的错误转换为拒绝。
自从我遇到构造:
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 变得流行以来,这通常不再是一个问题,因为异步函数会自动将抛出的错误转换为拒绝。