Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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
Javascript 为什么这个承诺不起作用?_Javascript_Promise - Fatal编程技术网

Javascript 为什么这个承诺不起作用?

Javascript 为什么这个承诺不起作用?,javascript,promise,Javascript,Promise,我在玩弄诺言 这是我的代码: APC.UTIL.AutoDOM = { step: -1, PROMISES : [], add: function (fun) { this.PROMISES.push (fun); }, run: function () { this.step = 0; this.nn = this.PROMISES.length-1; this.PROMIS

我在玩弄诺言

这是我的代码:

APC.UTIL.AutoDOM = {
   step: -1,  PROMISES : [],          
   add: function (fun) {      
    this.PROMISES.push (fun);

  },          
  run: function () {      
   this.step = 0;   this.nn   = this.PROMISES.length-1; 
   this.PROMISES.push ( function() {this.end();});      

    Promise.all( this.PROMISES).then (   
     function ( ) { APC.UTIL.AutoDOM.step++; console.log("OK"+APC.UTIL.AutoDOM.step);}   
     ).catch(
     function(err) {    console.log(err);}
     ); 
  },
  end: function () {
     this.PROMISES.clear();


  }                  
  }
因此:

 APC.UTIL.AutoDOM.add (  function () {console.log("hello1");}   );        
 APC.UTIL.AutoDOM.add (  function () {console.log("hello2");}   );      
 APC.UTIL.AutoDOM.add (  function () {console.log("hello3");}   );      

 APC.UTIL.AutoDOM.run(); 
只工作一次

OK1


有人能修好我的密码吗?您在Promissions中看到的不是一系列承诺,而是一系列函数。 如果您的目标是执行所有这些函数(可能并行),然后执行另一个函数,每个函数的结果如下:

Promise
.map(this.PROMISES, function(f){ f() })
.map(function(_, i){ console.log('OK'+(i+1)) })
.finally(function(){ this.PROMISES.clear(); });

免责声明:使用蓝鸟测试

请指定您使用的promise库。目标是什么。找到它不起作用的原因很容易,但要知道你到底想要什么却很难。@dystroy:嗯,我怎么才能一个接一个地调用函数呢?我不知道你的意思,但也许你想在
all
之后调用
map
。你在用什么承诺图书馆?@dystroy我需要我的图书馆吗?我在玩纯js。。。。我尝试使用MDN和hml5岩石指示,但没有成功。我正在尝试自动化操作DOM的简单函数。我想一个接一个地执行。我知道我可以实现回调方法,但我想试试承诺。我编辑了我的答案。这就是您想要的吗?有几点问题:(A)如果将承诺返回函数添加到
函数
堆栈中,您是否应该
返回f()
?(b) 也许我遗漏了一些东西,但是下划线在里面做什么呢?(c) 从问题中的代码来看,OP似乎打算在
.run()
中同步调用
.clear()
。通过从finally子句调用
.clear()
,是否存在其他进程可能在当前堆栈完全服务之前添加更多函数的危险,以及在不服务的情况下丢弃这些函数的危险?这也许是人们想要的行为,但我对此表示怀疑。