当前位置: 首页 > Web前端 > HTML5

通过现实生活中的例子理解JavaScriptPromises

时间:2023-04-05 11:21:45 HTML5

想象一下,你是一位顶级歌手,粉丝们日以继夜地询问你即将推出的歌曲。你保证在它发布时将它发送给那些粉丝。这位歌手向歌迷提供了一份名单。他们可以填写他们的电子邮件地址,这样当歌曲可用时,所有订阅方都会立即收到。即使出现非常大的问题,例如录音室发生火灾导致歌曲无法发行,他们仍会收到通知。对于我们在编程中经常遇到的事情,这是一个现实的类比。做某事并需要时间的“生产代码”。例如,一些通过网络加载数据的代码。这就是“歌手”。一种“消费代码”,它期望通过消费“生产代码”产生的结果。许多功能可能需要结果。这些是“粉丝”。Promise是一个特殊的JavaScript对象,它将生产代码和使用代码链接在一起。按照我们的类比:这就是“订阅列表”。“生产代码”需要任何时间来产生承诺的结果,并且“承诺”使该结果在准备就绪时可供所有订阅的代码使用。letpromise=newPromise(function(resolve,reject){//执行者(生产代码,“歌手”)});传递给newPromise的函数称为执行器。当创建新的Promise时,执行器会自动运行。它包含最终应该产生结果的生产代码。按照上面的类比:表演者就是“歌手”。它的参数resolve和reject是JavaScript本身提供的回调。这是两个本地对象。我们的代码只在执行器内部。当执行者得到结果时,无论早晚,它都应该调用以下回调之一:resolve(value)—如果作业成功完成,则返回结果值。reject(error)–如果发生错误,error是一个错误对象。总结一下:执行器自动运行并尝试执行作业。尝试完成后,成功时调用resolve,错误时调用reject。新的Promise构造函数返回的Promise对象具有以下内部属性:state—最初是“pending”,然后在调用resolve时变为“fulfilled”,或者在调用reject时变为“rejected”。结果-最初未定义,然后在调用resolve(value)时更改为值,或者在调用reject(error)时更改为错误。