Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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 Node.js Q.all()和承诺数组_Javascript_Arrays_Node.js_Firebase - Fatal编程技术网

Javascript Node.js Q.all()和承诺数组

Javascript Node.js Q.all()和承诺数组,javascript,arrays,node.js,firebase,Javascript,Arrays,Node.js,Firebase,在node.js中,我有一个承诺数组,但是当我想要执行一个Q.all()时,我就开始执行了;在这个过程中,似乎什么都没有发生。也许我的阵列中有一个未解决的承诺,它阻止了进程?我不确定我在这里做的是什么,但我的目标是一次执行所有这些函数,然后返回完整的“令牌”数组以将其发送到另一个文件中。如何使用Q.all()正确执行此操作? 我的“承诺”数组已满,现在 我想在这里执行一次all in,然后获取数组中捕获的所有令牌 Q.all(promises).then(function(result

在node.js中,我有一个承诺数组,但是当我想要执行一个Q.all()时,我就开始执行了;在这个过程中,似乎什么都没有发生。也许我的阵列中有一个未解决的承诺,它阻止了进程?我不确定我在这里做的是什么,但我的目标是一次执行所有这些函数,然后返回完整的“令牌”数组以将其发送到另一个文件中。
如何使用Q.all()正确执行此操作?

我的“承诺”数组已满,现在 我想在这里执行一次all in,然后获取数组中捕获的所有令牌

     Q.all(promises).then(function(results) {
       var uniqueNames = [];
       for (i = 0; i < token.length; i++) {
           if (uniqueNames.indexOf(token[i]) === -1) {
               uniqueNames.push(token[i]);
               console.log('tokens' + token[i]);
           }
       },
       // error
       function(response) {
           console.log('Error in then' + response);
       }).catch(function(error) {
       console.log('CATCH ERROR' + error);
   });
   // Send token array to the API
   });
Q.all(承诺)。然后(函数(结果){
var uniqueNames=[];
对于(i=0;i

我真的不明白这个过程。你能解释一下这个代码有什么问题吗?

我成功了:

var pipo = new Array();
let count = 0;
promises.forEach(() => console.log(++count, 'done'));
已被替换为

var pipo = [];
然后我使用了“async”并使用map而不是“forEach”

正如@Kato所说,这个错误是我的一个承诺被拒绝了。我用以下命令调试它:

var pipo = new Array();
let count = 0;
promises.forEach(() => console.log(++count, 'done'));

最后,我使用了Q.all()方法和.then()以及最重要的.catch()!!!再次感谢各位帮助我解决此问题。

您的问题可能与for循环有关。尝试将
for(pipo中的var键)
的函数块内容提取到一个单独的函数中,看看是否有帮助。(谷歌不会在循环javascript中创建函数)。我建议在这里改用
array.map()
。首先,您需要添加一个.catch()块来捕获输出的任何错误。您还应该在调用Q.all()方法之前(确保代码在此处实际生成)和在.then()内(这样您就知道它是否真正解析)进行日志记录。作为最后手段,您需要执行let count=0;promises.forEach(()=>console.log(++count,'done');(基本调试尽职调查;检查所有输出并隔离故障点)谢谢@Kato。我用.catch()块编辑了我的问题我照你说的做了!我检查了所有的输出,一切正常,但我记录了“当时出错”。现在,我知道问题出在哪里了。我如何解决这个问题?这意味着您的一个承诺是调用reject(),但不传递任何细节。因此,你需要兑现我上面提到的承诺,找出哪一个,然后在那里埋头苦干。