Promise没有在node.js上解析

时间:2016-01-16 20:28:09

标签: javascript node.js asynchronous promise

我目前在node.js / Promises方面遇到很多问题。目前我做的很简单:

module.js

<p>Select a league list.</p>

<select id="mySelect" onchange="myFunction()">
  <option value="<iframe src='http://www.tablesleague.com/iframe?width=232&height=430&font_name=Tahoma&position=1&font_size=12&team_link=1&link_color=404040&games=1&wins=1&draws=0&lost=0&goals=0&goals_against=0&gd=0&points=1&next=0&form=0&font_size=12&font_color=000000&bg_color=FFFFFF&header_font_color=FFFFFF&header_bg_color=1fb9e4&bg_col=1fb9e4&font_color_col=FFFFFF&highlight=e3e3e3&hover=fff6bf&league_header=1&league=l_145&team=&timezone=7&language=2&team_flags=0' width='232' height='500px' frameborder='0' scrolling='no'></iframe>" selected="selected">Premier League
  <option value="<iframe src='http://www.tablesleague.com/iframe?width=232&height=430&font_name=Tahoma&position=1&font_size=12&team_link=1&link_color=404040&games=1&wins=1&draws=0&lost=0&goals=0&goals_against=0&gd=0&points=1&next=0&form=0&font_size=12&font_color=000000&bg_color=FFFFFF&header_font_color=FFFFFF&header_bg_color=1fb9e4&bg_col=1fb9e4&font_color_col=FFFFFF&highlight=e3e3e3&hover=fff6bf&league_header=1&league=l_474&team=&timezone=7&language=2&team_flags=0' width='232' height='430' frameborder='0' scrolling='no'></iframe>">Seria A
  <option value="BBVA">BBVA
  <option value="Bundes">Bundes
</select>
<p id="demo"></p>

<script>
document.getElementById('mySelect').value = '';
function myFunction() {
    var x = document.getElementById("mySelect").value = '';
    document.getElementById("demo").innerHTML = x;
}
</script>

main.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;

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

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

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

我不知道为什么我的模块将Promise作为undefined返回。有人可以帮帮我吗?我无法绕过这个。非常感谢你!

而且,虽然module.myFunction().then(function(result) { ^ TypeError: Cannot read property 'then' of undefined 将文件写为file-0.txt等,但文件根本没有内容。

1 个答案:

答案 0 :(得分:3)

您的代码有两个问题:

  • 原生fs.writeFile()未返回承诺
  • 您的函数未返回承诺

对于第一个问题,您可以自己编写一些包装器或使用类似fs-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;