Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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_Express_Promise - Fatal编程技术网

Javascript 答应所有人不要开枪

Javascript 答应所有人不要开枪,javascript,express,promise,Javascript,Express,Promise,我第一次尝试让承诺生效。然而,我的承诺。所有的永远不会开火 我正在使用node.js和express const promises = [ new Promise( () => { var query = `...`; mssql.query(query, function(obj){ finalRes['key1'] = obj.recordset; return true;

我第一次尝试让承诺生效。然而,我的承诺。所有的永远不会开火

我正在使用node.js和express

const promises = [
    new Promise( () => {
        var query = `...`;  

        mssql.query(query, function(obj){
            finalRes['key1'] = obj.recordset;
            return true;
            //this works
        });
    }),
    new Promise( () => {
        var query = `...`;  

        mssql.query(query, function(obj){
            finalRes['key2'] = obj.recordset;
            return true;
            //this works
        });
    }),
    ...
]

Promise.all(promises).then(() => {
    res.send(finalRes);
    // this is never firing
});
我一直在用谷歌搜索东西,但我找不到解决办法。我希望有人能指出我做错了什么


干杯

您的承诺创建代码是错误的,因为它们永远无法解决。实际上,您应该做的是在基于回调的代码中调用
resolve
函数。我会走得更远一点,让所有这些承诺都能用它们的结果来解决,而不是修改一些外部价值。像这样:

const promises = [
  new Promise( (resolve, reject) => {
    var query = `...`;  
    mssql.query(query, function(obj){
      resolve({key1:obj.recordset});
    });
  }),
  new Promise( (resolve, reject) => {
    var query = `...`;  
    mssql.query(query, function(obj){
      resolve({key2:obj.recordset});
    });
  }) // ...
];

Promise.all(promises).then(results => {
  res.send(Object.assign({}, ...results));
});
根据查询的构建方式,您可以更进一步—编写一个通用查询生成器函数,该函数将查询和键作为参数,并返回一个承诺。同样,这个函数应该易于测试


作为旁注,您的代码过于乐观,它还应该为每个查询提供
error
回调和
reject()
调用;引用错误:未定义解析。。。知道为什么吗?因为你错过了Promise构造函数中的
(解析,拒绝)
部分?