我有一个异步从服务器获取值的函数:
var request = require('request');
Promise.promisifyAll(request);
function getValue(){
return request.getAsync('http://www.google.com')
.then(function(resp){ return resp.body; })
.catch(function(err){ thow err; });
}
我想获取此值并将其转储到文件中:
var fs = require('fs');
Promise.promisifyAll(fs);
getValue().then(fs.writeFileAsync, "file.html");
问题是fs.writeFileAsync
期望参数1是文件,参数2是数据,但getValue()
返回数据。这是错误的说法:
Unhandled rejection Error: ENAMETOOLONG: name too long, open '<html....'
at Error (native)
我现在可以通过编写辅助函数来交换参数来解决这个问题:
function myWriteFile(data, fileName) {
return fs.writeFileAsync(fileName, data);
}
虽然如果没有编写一个首选的帮助函数就可以解决这个问题,因为我预计会出现很多类似的问题,并且不想用50个辅助函数来混淆我的代码。我也觉得从承诺传递数据到writeFile
可能是一个非常常见的用例。
答案 0 :(得分:2)
.then()
函数的第二个参数是错误回调,而不是参数。你的代码根本不起作用。
相反,您可以使用.bind
预绑定参数:
getValue().then(fs.writeFileAsync.bind(null, "file.html"));
请注意,.bind()
的第一个参数是this
参数,这并不重要。