假设我有这个代码
function y(resolve, reject)
{
  console.log("Result");
  resolve();
}  
var promise = new Promise(y);
我想知道的是该函数是否y会异步执行。
假设我有这个代码
function y(resolve, reject)
{
  console.log("Result");
  resolve();
}  
var promise = new Promise(y);
我想知道的是该函数是否y会异步执行。
这取决于Promise的实现。如果我们检查规范. 您可以在此处找到最终规范- 由于此答案最初是编写的,因此已完成。
这是相关的摘录(您可以在此处找到原始来源)
ES6 标准表明Promise的履行始终是异步的(参见第 25.4.5.3Promise.prototype.then节和随附的第 25.4.5.3.1 节,PerformPromiseThen)。我把相关材料放在下面。
TLDR:传递给promise的函数是同步执行的,但是后续的then调用总是异步执行的。
另一个答案证明了这一点,但让我谈谈推理:
Promise构造函数回调(在 ES6 规范或构造函数规范库实现中指定)将始终同步执行 - 这是为了在您需要访问的情况下从中提取延迟(旧形式的Promise构造)到resolve回调:
var r;
var p new Promise(function(resolve, reject){
    r = resolve;
});
// use r here, for example
arr.push(r);
then 回调then将始终异步执行,几乎所有主流 promise 实现(Native、bluebird、$q、Q、when、rsvp、promise、jQuery(从 3.0 开始)等)以及本机 promise 实现(或实现的超集,以及更多约束)Promise/A+。
这正是从Promises/A 创建 Promises/A+的原因。异步保证将被保留,Zalgo 不会被释放。(另见这篇文章)。
发生这种情况(异步保证)的事实是完全有意的,并积极防止了竞争条件。内部和外部的代码then将始终以相同的顺序执行。
这是相关的报价:
onFulfilled或者onRejected在执行上下文堆栈仅包含平台代码之前不得调用。[3.1]。