首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async.waterfall未按预期工作

async.waterfall未按预期工作
EN

Stack Overflow用户
提问于 2016-07-11 07:10:10
回答 1查看 683关注 0票数 0

我第一次使用async.waterfall,遇到了一些麻烦。

下面是我试图调用的两个函数:

代码语言:javascript
复制
function generateImageURL(data, callback){
   // ... xhr stuff
    xhr.onload = function () {
        callback(data, JSON.parse(xhr.responseText).data.link);
    }
  // ... more xhr stuff
    xhr.send(fd);
}

代码语言:javascript
复制
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);
    });
}

我的瀑布功能如下:

代码语言:javascript
复制
 async.waterfall([
        generateImageURL.bind(this, data),
        generateCoordinates
    ], function(err, result){

    });

我想将data从外部作用域传递到generateImageURL,然后将数据与url一起传递给generateCoordinates。来自generateCoordinatesgenerateCoordinates应该调用匿名函数。

我的问题是,generateCoordinates从未被调用过。尽管我在generateImageURL中称之为它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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);的形式调用您的回调

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38301053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档