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 解析node.js中for循环后多个writeFile函数完成时的承诺_Javascript_Node.js_Asynchronous_Promise - Fatal编程技术网

Javascript 解析node.js中for循环后多个writeFile函数完成时的承诺

Javascript 解析node.js中for循环后多个writeFile函数完成时的承诺,javascript,node.js,asynchronous,promise,Javascript,Node.js,Asynchronous,Promise,首先,这是我当前代码的一部分: return new Promise(function(resolve, reject) { for (var i = 1; i <= variables; i++) { fs.writeFile("file-" + i + ".txt", dataString + ' ' + i + ' 0', "utf-8"); } if (i == variables)

首先,这是我当前代码的一部分:

return new Promise(function(resolve, reject) {
        for (var i = 1; i <= variables; i++) {
            fs.writeFile("file-" + i + ".txt", dataString + ' ' + i + ' 0', "utf-8");
        }   
        if (i == variables)
            resolve('Files have been written');
        else
            reject('Some error occured');
    })

也许你在找这样的东西:

Promise.all(
  variables.map(function (variable, i) {
    return new Promise(function (resolve, reject) {
      fs.writeFile("file-" + i + ".txt", dataString + ' ' + i + ' 0', "utf-8", function (err) {
        if (err) {
          reject(err);
        } else {
          resolve();
        }
      });
    });
  })
)
.then(function () {
  // Files have been written
})
.catch(function (err) {
  // Some errors occured
});

你想要
Promise.all()
@SLaks是的,我已经读过了,但我不确定如何使用它。如果你使用的是像q这样的Promise库,那么创建一个像
var f=q.denodeify(fs.write)
,将每个fs.write放入一个arr中,创建一个Promise数组,然后使用q.all(arr)实现。否则,每个fs.write都有一个回调,为每个fs.write创建一个承诺,然后等待所有fs.write回调resolve@PrakashRajagaopal我在node.jsYa中使用了
Promise
的本机实现,它确实有denodeify和all。或者至少我希望我看到的是正确的医生:谢谢你的回答。我目前正在尝试类似于我在“更新1”下的原始帖子中所述的方法,但不幸的是,我无法让它发挥作用。显然,Promissions数组中的Promissions似乎永远无法解析,我不知道为什么,但我希望它与我的writeFile函数有关,因为它实际上将文件写入我的驱动器,但文件本身是空的:/@Since001我很确定某处有拒绝,这就是then子句没有被调用的原因。@hege_hegedus它实际上被调用了,但我的输出是:
TypeError:无法读取未定义的
@Since001的属性'then',这意味着您没有向我们展示的某些代码中存在实现错误
Promise.all(
  variables.map(function (variable, i) {
    return new Promise(function (resolve, reject) {
      fs.writeFile("file-" + i + ".txt", dataString + ' ' + i + ' 0', "utf-8", function (err) {
        if (err) {
          reject(err);
        } else {
          resolve();
        }
      });
    });
  })
)
.then(function () {
  // Files have been written
})
.catch(function (err) {
  // Some errors occured
});