<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Promise on Laning's Blog</title><link>https://blog.laning.org/tags/promise/</link><description>Recent content in Promise on Laning's Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 10 Apr 2025 15:34:47 +0800</lastBuildDate><atom:link href="https://blog.laning.org/tags/promise/index.xml" rel="self" type="application/rss+xml"/><item><title>异步函数async和await</title><link>https://blog.laning.org/posts/wp-0446/</link><pubDate>Thu, 10 Apr 2025 15:34:47 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0446/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;最近在回头看&lt;a href="https://github.com/laningya/nfd/blob/main/worker.js"&gt;nfd项目&lt;/a&gt; 的源码，看到了使用async和await的js代码，因此想了解一下代码运行的机制。&lt;/p&gt;
&lt;h2 id="一个例子"&gt;一个例子&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;function SicBo() {
return new Promise((resolve, reject) =&amp;gt; {
console.log(&amp;#34;开始摇&amp;#34;)
setTimeout(() =&amp;gt; {
let n = parseInt(Math.random() * 6 + 1, 10)
resolve(n)
}, 1000)
})
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="上述代码的执行过程如下"&gt;上述代码的执行过程如下：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;立即执行 &lt;code&gt;console.log(&amp;quot;开始摇&amp;quot;)&lt;/code&gt;&lt;/strong&gt; —— ✅ 马上输出。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动一个“1秒后执行的任务”&lt;/strong&gt; —— 通过 &lt;code&gt;setTimeout(...)&lt;/code&gt; 注册了一个回调，1 秒后执行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;返回一个 Promise 对象&lt;/strong&gt;，这个 Promise 会在 1 秒后变成“完成状态”并给出点数。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>