构造函数主要用于包装不包含的函数 已经支持承诺了。
promises
的函数会
这样做是正确的,即使用promise
构建Promise
并将其返回?promise
构造函数之外,还有更好的方法来创建Promise
吗?callback
吗?我的意思是你不能避免callback
至少resolves
?换句话说,我们必须在库中的某处将它包装成正确的吗?答案 0 :(得分:1)
在较低的层次上,已经支持promises的函数就是这样做的,即使用Promise构建一个promise并将其返回?
是。也许。在较低的层面上,我们不知道已经支持承诺的函数如何构建它们。想象一下Promise
构造函数本身用于构造promise的内容......
除了使用Promise构造函数之外,还有更好的方法来创建一个promise吗?
不,JS无法访问其他方式。但正如MDN所指出的那样,你自己应该很少需要自己做,而只是使用已经为你创建承诺的其他函数(当然它们本身会以某种方式通过Promise构造函数)。
最终,您必须在某处注册回调吗?我的意思是你不能避免回调至少解决?
不一定。在较低级别,您还可以注册任何允许解析承诺的任意数据结构,这不一定需要是回调函数。 (但是,它确实等同于注册resolve
回调函数)。
例如fetch
API的本机实现(afaik直接返回promises的第一个本机API)很难在任何地方创建JS回调函数来解决它的承诺。
答案 1 :(得分:1)
Promise.resolve(theValue)
。如果您想等待多个承诺,请使用Promise.all(allThePromises)
。当然,每次拨打.then
都会收到新的承诺。.then
。 说了这么多,ES2017 introduced async functions基本上是承诺的语法糖。 async
函数总是返回一个promise,你可以使用await
来解包promises。例如:
async function get() {
return await Promise.resolve(42);
}
get().then(console.log);

答案 2 :(得分:1)
- 在较低的层面上,已经支持承诺的功能就是这样做,即使用Promise构建一个承诺并将其返回?
醇>
最终目标是即使Node.JS中的低级API也将使用Promise语法,因此不需要回调。 PromiseJS社区认为构造函数语法是此最终行为的polyfill。 Source.
在实践中,显然情况并非如此。浏览器,Node.JS和其他Javascript运行时环境大量使用回调,因此使用了Promise构造函数。
- 除了使用Promise构造函数之外,还有更好的方法来创建一个promise吗?
醇>
是的 - 但这取决于应用程序。
最明显的是,如果您使用已经返回承诺的API,则可以使用.then()
和.catch()
语法将承诺链接在一起。
还有许多库扩展了默认的Promise功能,并提供了方便的方法来提高性能和可读性。例如,Bluebird(一个常见的PromiseJS库)提供了一种方法来评估同时创建的多个promise的结果,以实现更快的整体运行时。
您还可以从其他范例构建Promise,这些范例简化代码,例如Promise.Promisify将回调函数转换为Promise函数,或Observable.toPromise将Observables转换为promises。
- 最终,您必须在某处注册回叫吗?我的意思是你不能避免回调至少解决?换句话说,我们必须在库中的某处将它包装成正确的吗?
醇>
与第一个问题的答案类似,这是当前使用回调范例的代码的症状。如果所有的库都使用较低级别的Promises,则情况并非如此。