javascript - 在 Node.js 中使用循环和文件读取进行 Promise

标签 javascript node.js promise q formidable

我看了很多例子但无法实现它..所以需要帮助..

问题..

  1. 循环中的内容应该被传递来逐一执行。
  2. 每次循环迭代都包含文件读取和数据库保存操作以及需要分配的其他一些对象属性。

我在这里创建了示例..

http://runnable.com/VI1efZDJvlQ75mlW/api-promise-loop-for-node-js-and-hello-world

如何运行:

API:http://web-91b5a8f5-67af-4ffd-9a32-54a50b10fce3.runnable.com/api/upload

方法:POST

内容类型:多部分/表单数据

上传多个同名文件。

..

最终的预期 promise 是

files.name = "name of file"
files.content
files.content-type
files.size

-保存到数据库。

目前我从文件中获取不同的内容..但其他文件内容未填充且未定义。

问候 莫伊恩

最佳答案

您正在寻找的技术是 thenable 链接

var p= Q();
Object.keys(files).forEach(function(key){
  p = p.then(function(){ // chain the next one
    return Q.nfcall(fs.readFile, files[key].path, "binary", i). // readfile
      then(function (content) { // process content and save
        files.filename =  files[key].name;
        files.path = files[key].path;
        files.content_type = files[key].type;
        files.size = files[key].size;
        console.log(files.filename);
        files.content = binaryToBase64(content);
        return Q.npost(art.save, art); // wait for save, update as needed
    }));
  });
});

基本上,我们通过链接每个操作并返回来告诉每个操作在前一个操作完成后发生,这会导致异步值等待。

作为副产品,您可以稍后使用

p.then(function(last){
    // all done, access last here
});

处理程序将在所有 promise 完成后运行。

关于javascript - 在 Node.js 中使用循环和文件读取进行 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468188/

相关文章:

javascript - 有 promise 的 Node 骑士

javascript - 无法让 Meteor 与轻量级 JS 触摸库 Hammer.js 配合使用

javascript - 如何在 JavaScript 中解析 JSON?

node.js - 带有 Node.js googleapis 包的 Google Drive SDK 会引发错误 : Invalid multipart request with 0 mime parts on files. 创建

javascript - 如何使用 promise 返回在 nodejs 的快速路由器中递归编辑的对象数组?

javascript - Promises - 从存储中获取参数

javascript - 为 JavaScript for 循环重用 "i"

javascript - 检查数据属性值是否等于字符串

javascript - 无法使用 Strongloop 从 s3 获取特定文件

javascript - Ember - 路径或模式 "vendor/ic-ajax/dist/named-amd/main.js"与任何文件都不匹配