javascript - 在数组映射内使用新的 Promise

标签 javascript node.js bluebird

我正在使用一个具有 3 个阶段的软件:

第一阶段、第二阶段和第三阶段。

在第一阶段,我使用 exiftool 从文件中提取元数据,但该过程是异步的,因此我需要在调用下一阶段之前等待结果,为此,我使用以下代码:

MAP.files = files.scan((file) => {

  return new Promise((resolve) => {

    exiftool(file, (error, metadata) =>  {
      file.error    = error
      file.metadata = metadata
      resolve(file)
    });

  });
});

返回的是带有一堆对象的数组,如下所示:

[ Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> }
  .....
]

第二阶段不是异步的,我需要像前一阶段一样使用 array.map 访问文件,如下所示:

MAP.files.text = MAP.files((file) => {

   //To be able to access the real file, i need use then, like this:


   file.then((realFile) => {

     console.log(realFile) // real file with properties
   });


});

在下一阶段(第 3 阶段),我想做同样的事情:

MAP.files.final = MAP.files.text((file) => {

});

我的问题是:THEN 函数,我不能逃避它吗?我需要在第一阶段之后的每个阶段使用 file.then 吗?

最佳答案

看起来使用 Promise.all 会对您有所帮助。

例如如果你有一系列的 promise ...

var p = [p1, p2, p3]

Promise.all(p).then( (results) => 
   /* results is an array of the results of each promise in p */
);

参见http://bluebirdjs.com/docs/api/promise.all.htmlhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all有关 Promise.all

的文档

关于javascript - 在数组映射内使用新的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35320761/

相关文章:

javascript - 如何以类似 JSON 的格式打印循环结构?

javascript - 警告 : a promise was created in a handler at but was not returned from it [bluebird]

node.js - 将嵌套属性分配给新对象的根的紧凑方法

javascript - NodeJS/JS-如何使循环wait()直到var不为空? [复制]

javascript - 如何将现有回调 API 转换为 Promise?

promise - Bluebird 的promise。包装方法的函数返回一个promise,可以吗?

java - 直接 Web 远程处理异步问题

javascript - 使用 lodash 合并 2 个数组

javascript - 我可以 orderByChildren 或 orderByValue 将 1 个 child 减去另一个吗? (或任何其他使用计算变量的方法)

javascript - asp.net mvc2 上的 jQuery ajax 帖子