javascript - Promise 无法在 Node.js 上解析

标签 javascript node.js asynchronous promise

目前我在使用 node.js/Promises 时遇到了很多问题。目前我正在做一些简单的事情,如下所示:

module.js

var fs = require('fs');

function myFunction() {
    var files = []; 
    for (var i = 0; i < 100; ++i) {
        files.push(fs.writeFile("file-" + i + ".txt", "file" + i, "utf-8", function(err) {
            if (err)
                throw err;
        }));
    }
    Promise.all(files).then(function() {
        return new Promise(function(resolve, reject) {
            resolve('ok');
        })
    });
}
exports.myFunction = myFunction;

ma​​in.js

var test = require('./module.js');

test.myFunction().then(function(result) {
    console.log(result);
})

但是,如果我运行 main.js,我的输出是:

module.myFunction().then(function(result) {
                   ^

TypeError: Cannot read property 'then' of undefined

我不知道为什么我的模块返回一个未定义的 Promise。有人可以帮我吗?我就是无法理解这个问题。非常感谢!

而且,虽然 writeFile() 将文件写入 file-0.txt 等,但这些文件根本没有内容。

最佳答案

您的代码有两个问题:

  • 原生 fs.writeFile() 不返回 Promise
  • 你的函数不返回 promise

对于第一个问题,您可以自己编写一些包装器或使用类似 fs-promise 的东西。对于第二个问题,您确实需要函数返回所有文件的 promise 。

那么你的代码可能如下所示:

var fsp = require('fs-promise');

function myFunction() {
  var files = []; 
  for (var i = 0; i < 100; ++i) {
    files.push( fsp.writeFile("file-" + i + ".txt", "file" + i, "utf-8" ) );
  }

  return Promise.all( files );

}
exports.myFunction = myFunction;

关于javascript - Promise 无法在 Node.js 上解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831789/

相关文章:

javascript - 当前不支持使用 applyConstraints 切换 facesMode(媒体流 Api)

javascript - 为什么我的 Sails.js 应用程序有一条我从未添加过的路线

node.js - ExpressJS只接受6次POST?

javascript - 如何等待所有promise都解决后再返回数据?

javascript - d3.js 处理非 svg 浏览器

javascript - 如何以动态形式迭代每个选择元素

javascript - 如何使用 Three.js 中的按钮选择场景中的对象

node.js - 为什么我可以按名称运行全局安装的 Node 模块?

c# - 集合初始值设定项的异步填充

JavaScript:Promise.all 结果中有 1 个未定义值