Javascript 在承诺构造函数中解析承诺是否有效?

Javascript 在承诺构造函数中解析承诺是否有效?,javascript,es6-promise,Javascript,Es6 Promise,在构造函数中这样解析承诺有效吗 var promise1 = new Promise(function(resolve, reject) { resolve('foo'); }); 而不是像下面这样在构造创建之后解析 var promise1 = new Promise(function(resolve, reject) { setTimeout(function() { resolve('foo'); }, 300); }); 是的,在构造函数中同步解析新承诺是完全

在构造函数中这样解析承诺有效吗

var promise1 = new Promise(function(resolve, reject) {
    resolve('foo');
});
而不是像下面这样在构造创建之后解析

var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});

是的,在构造函数中同步解析新承诺是完全可以接受的。IIRC,它甚至是验证套件中的一个测试用例

但是,如果解决方案不是有条件的,则可以使用ES6 Promise静态方法“resolve”更清楚地实现:

var promise1 = Promise.resolve( 'foo');

注意:如果抛出错误,这两种方法不同:

  • 如果执行者抛出错误,
    新承诺(执行者)
    返回被拒绝的承诺。
  • 如果对
    Promise.resolve
    的参数求值引发错误,则异常会阻止调用
    Promise.resolve

是的,在构造函数中同步解析新承诺是完全可以接受的。IIRC,它甚至是验证套件中的一个测试用例

但是,如果解决方案不是有条件的,则可以使用ES6 Promise静态方法“resolve”更清楚地实现:

var promise1 = Promise.resolve( 'foo');

注意:如果抛出错误,这两种方法不同:

  • 如果执行者抛出错误,
    新承诺(执行者)
    返回被拒绝的承诺。
  • 如果对
    Promise.resolve
    的参数求值引发错误,则异常会阻止调用
    Promise.resolve

当然可以,如果构造函数中无条件调用了
resolve
,那么这样做似乎很愚蠢(如果没有异步调用,为什么还要使用承诺呢?)您的第一个示例可以简化为。如果不是有效的使用,该函数将不存在-case@CertainPerformance框架的调用方需要承诺返回值类型。但是对于我的特定用例,我不必等待解析。当然,如果在构造函数中无条件调用
resolve
,那么这样做似乎很愚蠢(如果没有异步,为什么要使用承诺呢?)您的第一个示例可以简化为。如果不是有效的使用,该函数将不存在-case@CertainPerformance框架的调用方需要承诺返回值类型。但是对于我的特定用例,我不必等待解决。