JavaScript中的承诺即使没有被使用,也能保证取得进展吗?
假设我创建了一个表示JavaScript中的承诺即使没有被使用,也能保证取得进展吗?,javascript,node.js,promise,Javascript,Node.js,Promise,假设我创建了一个表示GET请求结果的Promise,但不等待/使用它就让它超出范围。我是否保证承诺会取得进展(即请求发生)?或者,垃圾收集器是否可能在解决之前将其清理干净?您正在将一个执行器函数传递给promise构造函数,即: new Promise(function (resolve, reject) { ... }) 如果该函数被promise构造函数调用(是的,它将被调用),那么其余的函数与是否将promise对象分配给任何对象都没有多大关系。您的函数已被调用,不能停止,当然不能被超出
GET
请求结果的Promise
,但不等待/使用它就让它超出范围。我是否保证承诺会取得进展(即请求发生)?或者,垃圾收集器是否可能在解决之前将其清理干净?您正在将一个执行器函数传递给promise构造函数,即:
new Promise(function (resolve, reject) { ... })
如果该函数被promise构造函数调用(是的,它将被调用),那么其余的函数与是否将promise对象分配给任何对象都没有多大关系。您的函数已被调用,不能停止,当然不能被超出范围的调用方对象停止
因此,是的,您的executor函数保证会取得进展。Promise实际上并不代表GET请求的结果。重要的是你在函数中所做的事情,因此,是的,如果你确实提出请求,它将被提出。请注意你自己的措辞:“…一个
承诺
,它代表一个获取
请求的结果…”我在那里的关键字上加了强调。承诺代表的是行动的结果,而不是行动本身。我只能附和@HereticMonkey。请注意,承诺是通过运行get请求中引用的resolve
回调引用的,这就是保证承诺不会被垃圾收集的原因。而不是相反。活动异步请求不会因为“被垃圾收集”而停止,相反,它充当GC的根对象。@Bergi感谢您的深入解释!