我正在使用when.js
库学习承诺,使用when.map
nodefs.readFile
让我觉得我错过了一些东西。
foo
Promise 在作为单个 Promise 调用时可以正常工作,但在用作映射器函数时会失败,when.map
因为 index 作为第三个参数注入(然后回调作为第 4 个参数传递)。
API doc 说when.map
映射器函数需要有两个参数。那么 mapper 函数可以写成bar
,它可以在任何上下文中工作。
var when = require('when');
var node = require('when/node');
var _ = require('lodash');
// readFile has the same signature as fs.loadFile
function readFile(param1, param2, callback) {
console.log(Array.prototype.slice.call(arguments));
callback(null, [param1, param2]);
}
var foo = _.partialRight(node.lift(readFile), 'base64');
var bar = function (fileName, index) {
return node.lift(readFile)(fileName, 'base64');
};
when.map(['1', '2'], bar).done(); // works
when.map(['3', '4'], foo).done(); // does not work
有没有更优雅的方法来编写bar
函数?