【问题标题】:How do i return the callback after loops are done循环完成后如何返回回调
【发布时间】:2015-05-08 03:57:10
【问题描述】:

我有一个解决方案,其中我有 2 个循环,看起来像这样:

function myFunc(types, pages, callback) {
    var pageResults = [];
    for (var i = 0; i < types.length; i++) {
        var type = types[i];
        for (var j = 1; j < pages; j++) {
            getBikes(type, j, function(err, results, settings){
                if(err) throw err;
                var obj = {
                    results: results,
                    settings: settings
                };
                pageResults.push(obj);
            });
        };
    };
    return callback(pageResults);
});

var types = ["string1", "string2", "string3", "string4"];
var pages = 15;
myFunc(types, pages, function(pageResults){
    console.log("done");
});

但这会立即结束,它会在类型循环中的 1 次循环后返回,如果我记录从内部函数返回的 obj 而不返回回调,它将一直运行。

是的 getBikes 是一个类似于 ajax 的异步调用,但在 nodejs 中,带有一个名为 request.js 的模块

【问题讨论】:

标签: javascript


【解决方案1】:

你不能返回回调值,但你可以像下面这样调用回调函数

function myFunc(types, pages, callback) {
    var pageResults = [];
    for (var i = 0; i < types.length; i++) {
        var type = types[i];
        for (var j = 1; j < pages; j++) {
            getBikes(type, j, function(err, results, settings){
                if(err) throw err;
                var obj = {
                    results: results,
                    settings: settings
                };
                pageResults.push(obj);
                if((i === types.length-1) && (j === pages -1)){
                   callback(pageResults);
                }
            });
        };
    };
});

【讨论】:

  • getBikes 是一个异步调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2021-01-23
  • 2019-03-25
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多