我第一次使用async.waterfall,遇到了一些麻烦。
下面是我试图调用的两个函数:
function generateImageURL(data, callback){
// ... xhr stuff
xhr.onload = function () {
callback(data, JSON.parse(xhr.responseText).data.link);
}
// ... more xhr stuff
xhr.send(fd);
}和
function generateCoordinates(data, url, callback){
console.log("CALLED"); // never gets called
navigator.geolocation.getCurrentPosition(function(p){
data.image_url = url;
data.coordinates = [p.coordinates.longitude, p.coordinates.latitude];
callback(data);
});
}我的瀑布功能如下:
async.waterfall([
generateImageURL.bind(this, data),
generateCoordinates
], function(err, result){
});我想将data从外部作用域传递到generateImageURL,然后将数据与url一起传递给generateCoordinates。来自generateCoordinates的generateCoordinates应该调用匿名函数。
我的问题是,generateCoordinates从未被调用过。尽管我在generateImageURL中称之为它。
发布于 2016-07-11 07:37:57
来自文档
每个函数都被传递一个回调(err,result1,result2,.)它必须在完成后才能完成。第一个参数是一个错误(可以为null),任何进一步的参数都将作为参数传递给下一个任务。
和
如果任何任务将错误传递给它们自己的回调,则不会执行下一个函数。
您的回调是callback(data, JSON.parse(xhr.responseText).data.link);,您将data作为err参数传递,因此它被解释为一个错误,您的下一个函数没有被调用。如果您在最后的回调中使用console.log(err),您应该看到它。
以callback(null, data, JSON.parse(xhr.responseText).data.link);的形式调用您的回调
https://stackoverflow.com/questions/38301053
复制相似问题