Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ecmascript 6 然后注册的函数能否像Promise构造函数一样获得自己的解析方法?_Ecmascript 6_Es6 Promise - Fatal编程技术网

Ecmascript 6 然后注册的函数能否像Promise构造函数一样获得自己的解析方法?

Ecmascript 6 然后注册的函数能否像Promise构造函数一样获得自己的解析方法?,ecmascript-6,es6-promise,Ecmascript 6,Es6 Promise,由then方法注册/执行的函数是否能够掌握自己的解析 当其构造能够注入其解析方法时的承诺,如: new Promise(function(resolve, reject){ async(resolve();}) 但是,到那时注册的操作通常在resolve方法中触发,如(至少在我看到的一些示例中): 没有真正的方法注入延迟。将解析为延迟。转换方法。就好像then不期望它将执行的函数是异步的,不像Promise构造函数,因此它不是同构的 实际上,你为一项工作做出了8个承诺,理想情况下,这项工作应该

then
方法注册/执行的函数是否能够掌握自己的解析

当其构造能够注入其解析方法时的承诺,如:

new Promise(function(resolve, reject){ async(resolve();})
但是,到那时注册的操作通常在resolve方法中触发,如(至少在我看到的一些示例中):

没有真正的方法注入
延迟。将
解析为
延迟。转换
方法。就好像
then
不期望它将执行的函数是异步的,不像Promise构造函数,因此它不是同构的

实际上,你为一项工作做出了8个承诺,理想情况下,这项工作应该在4个承诺中完成。如果由
注册的转换函数可以获得自己的
解析
,这是延迟的
。解析
,是否可以解决此问题?转换函数可以是ansychronous的,并且在转换完成后可以解析它

then方法注册/执行的函数是否能够捕获自己的解析

没有

或者至少不返回一个拦截其回调的thenable,但这真的没有意义

这几乎就好像then不期望它将执行的函数是异步的一样

哦,是的。您的误解似乎是基于这样一种想法:异步函数就是那些接受回调的函数。他们不是。异步函数是那些返回承诺的函数!然后
完全有能力处理它们

…不像承诺构造器


相反。
Promise
构造函数是这里的奇数。它的唯一目的是将旧式回调函数转换为承诺函数。您现在只需要处理这些问题,新的API将立即返回承诺。

在您的情况下,什么是
延迟
?(ES6承诺没有
延迟
变量)。
延迟
是原始承诺中的占位符,用于将then注册的
函数
解析
存储到返回的承诺中,以便在解析原始承诺的后期启动。然而,我需要看看ES6是否具体说明了这一点,或者我可以把这变成一个一般性的问题?在链接的帖子中,你到底指的是哪一个答案(你认为它使用了太多的承诺)?请记住,承诺是廉价的。原始问题中的代码本身。不是答案。我只是想知道,如果我的第一个asyn函数使用Promise Constructor执行,是否可以获得解析,那么到那时已注册/执行的函数不应该也能够获得唯一可以限制的值的解析吗?好的,谢谢,真的很有启发性。您的意思似乎是XMLHttpRequest和setTimeout一开始就不正确!“它的唯一目的是将旧式回调函数转换为承诺”你的意思是承诺构造函数就像一个遗留的支持API吗?还是说一个人无法回避第一个“决心”?当然,您只能处理API的唯一问题,但构建的第一个承诺(不排除库内部创建的承诺)需要将其解析传递到外部,以便某些事件响应?是的,所有新API都直接基于流和承诺,您可以获得事件响应的承诺<代码>新承诺
仅在低级别(例如
内部然后
内部)或库内部构建承诺时才需要。
resolve = function(value){
  self.value = value;
  self.state = "resolved";
  deferred.resolve(deferred.transform(self.value));
}