发送两个参数的承诺

时间:2015-08-02 08:57:50

标签: javascript callback arguments promise

如何将其他参数传递给handleFile

return fs.readFileAsync(path, 'utf8')
    .then(handleFile)
    .then(Process)
    // ...

var handleFile = function (data) {
    var keyVal = {};
    data.split("\n").forEach(function (element) {

// ...

我处理vfilereadFileAsync获取数据。

我需要它像(伪代码):

return fs.readFileAsync(path, 'utf8')
                .then(handleFile(newParam1,newParam2))
                .then(Process)

                // ...


var handleFile = function (data,newParam1,newParam2) {

2 个答案:

答案 0 :(得分:1)

您可以使用.bind()。这是一种部分应用程序并设置执行范围的方法(在您的情况下这不应该是重要的null

.then(handleFile.bind(null, newParam1,newParam2))

var handleFile = function (newParam1,newParam2, data,) { // ...

您也可以在不使用bind的情况下实现部分应用程序,然后它将如下所示:

function handleFileWithParams(param1, param2) {
    return function handleFile(data) {
        // ... do stuff
    } 
}

.then(handleFileWithParams(param1, param2))

最后,当您已经使用像lodash这样的库时,您可以使用提供的函数_.partial来完成该操作。

答案 1 :(得分:0)

return fs.readFileAsync(path, 'utf8')
         .then(function(data) { 
            // get newParam1, newParam2 here or make sure they are available in closure
            return handleFile(data, newParam1, newParam2); 
         })
         .then(Process)
         ....


var handleFile = function (data,newParam1,newParam2) {