当前位置: 首页 > 面试题库 >

Promise构造函数回调是否异步执行?

江渊
2023-03-14
问题内容

假设我有这段代码

function y(resolve, reject)
{
  console.log("Result");
  resolve();
}

var promise = new Promise(y);

我想知道的是该函数是否y将异步执行。


问题答案:
  1. 设完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。
  2. 如果完成是突然完成,则
    • 令status为Call(resolvevingFunctions。[[Reject]],undefined,«completion。[[value]]»)。
    • ReturnIfAbrupt(状态)。

ES6标准指出,承诺的实现 始终 是异步的(请参见25.4.5.3
Promise.prototype.then节和随附的25.4.5.3.1节PerformPromiseThen)。我已将相关材料放在下面。

然后履行承诺

  1. 否则,如果promise的[[PromiseState]]内部广告位的值“已实现”,
    • 令value为promise的[[PromiseResult]]内部广告位的值。
    • html" target="_blank">执行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,«fulfillReaction,value»)。
  2. 否则,如果promise的[[PromiseState]]内部广告位的值被“拒绝”,
    • 假设reason为promise的[[PromiseResult]]内部广告位的值。
    • 执行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,«rejectReaction,reason»)。

TLDR :传递给promise的函数是同步执行的,但是后续then调用始终是异步执行的。



 类似资料:
  • 问题内容: 我如何最好地处理以下情况? 我有一个构造函数,需要一些时间才能完成。 我看到了三个选项,每个选项似乎都与众不同。 一种 ,向构造函数添加回调。 第二 ,使用EventEmitter发出“已加载”事件。 或三 ,阻止构造函数。 但我以前从未见过任何完成的事情。 我还有什么其他选择? 问题答案: 鉴于有必要避免在Node中进行阻塞,事件或回调的使用并不奇怪(1)。 稍加修改为2,即可将其与

  • 我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语

  • 问题内容: 目前,我正在尝试在类构造函数中使用。这样一来,我就可以为正在从事的Electron项目获取自定义标签。 但是,目前该项目无法正常工作,并出现以下错误: 有没有办法避免这种情况,以便我可以在其中使用异步/等待?而不需要回调或.then()? 问题答案: 这 永远 行不通。 该关键字允许在标记为函数中使用,但它也是功能转换成一个承诺发生器。因此,标有的函数将返回承诺。另一方面,构造函数返回

  • 你好,我正在使用异步/等待在我的打字稿项目,但我得到这个日志: [ts]ES5/ES3中的异步函数或方法需要Promise构造函数。确保您有一个Promise构造函数的声明,或者在您的选项中包含ES2015。 我该如何解决这个问题?

  • 我有一个异步函数,它调用其中的另一个异步函数。此异步函数正在返回" 你能帮我解决这个问题吗? 以下是第一个异步函数: 如你所见,我调用updateAllProducts函数,并将该值存储到一个变量调用newAllProducts. updateAllProducts是另一个异步函数。 以下是updateAllProducts的代码: 此updateAllProducts函数正在调用另一个异步函数调

  • 问题内容: 我正在尝试为博客平台创建一个构造函数,并且内部进行了许多异步操作。这些范围包括从目录中获取帖子,对其进行解析,通过模板引擎发送它们,等等。 所以我的问题是,让我的构造函数返回一个promise而不是调用它们的函数的对象是不明智的。 例如: 现在,用户可能 还不 提供补充的Promise链接: 这可能会带来问题,因为用户可能会感到困惑,为什么 在构造后仍然无法使用。 在构造函数中使用Pr