RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 560396
Accepted
justyx
justyx
Asked:2020-08-29 03:48:09 +0000 UTC2020-08-29 03:48:09 +0000 UTC 2020-08-29 03:48:09 +0000 UTC

函数返回值的问题。javascript [重复]

  • 772
这个问题已经在这里得到回答:
如何从事件或回调函数中返回值?或者至少等待他们完成 (3 个答案)
6 年前关闭。

我将数据传递给函数进行处理,以便随后将处理结果写入文本文件。从日志触发的顺序来看,我明白问题是值没有时间返回,但我不知道如何处理。我真的需要建议。实际功能本身:

function convertMe(polygonArray){
var toWrite = '';
var dataToReturn = '';

var polygon = JSON.parse(polygonArray);
var isFirst = true;
var printFeature = function (name, poly) {
  var out = {
    "type": "Feature",
    "properties": {
      'name': name,
    },
    "geometry": {
      "type": "Polygon",
      "coordinates": poly
    }
  };
  out = JSON.stringify(out);
  if(!isFirst) {
    out = ',' + out
  }
  isFirst = false;

  toWrite = toWrite + out;
}
toWrite = toWrite + '{"type": "FeatureCollection","features": [';
async.mapSeries([polygon], function (poly, cb) {

  var options = {
    coords: poly,
    precision: 6,
    rowMode: true,
    hashMode: 'extent',
    threshold: 0.2
  };
  printFeature('shape', poly);
  var rowStream = hasher.stream(options),
    a = 0;

  rowStream
    .on('end', cb)
    .pipe(through2.obj(function (arr, enc, callback) {
      for(var i = 0; i < arr.length; i++) {
        var bb = ngeohash.decode_bbox(arr[i]);
        printFeature(arr[i], [
              [
                [bb[1], bb[2]],
                [bb[3], bb[2]],
                [bb[3], bb[0]],
                [bb[1], bb[0]],
                [bb[1], bb[2]]
              ]]);
      }
      callback();
    }));
}, function () {
  toWrite = toWrite + ']}';
  console.log('Внутри вызова '+toWrite);
  return toWrite;
});

};

通话地点:

worldData.features.forEach(function(feature){
q.defer(function(done){
  var dataToConvert = JSON.stringify(feature.geometry.coordinates);
  console.log('Место вызова '+convertMe(dataToConvert));
  //fs.writeFileSync(currDir+'/'+outputDir+'/'+'cell_'+i+'.s2', convertMe(dataToConvert));

  i++;
  done()
   });
});

控制台输出:

Место вызова undefined
Внутри вызова {"type": "FeatureCollection","features": [{"type":"Feature","properties":{"name":"shape"},"geometry":{"type":"Polygon","coordinates":[[[[-56.0828202,46.8785071],[-56.0832065,46.8780553],[-56.0840219,46.877938],[-56.0843308,46.8776271],[-56.0848973,46.8777385],[-56.0852407,46.8776564],[-56.0858329,46.8777385],[-56.0865109,46.8773278],[-56.0874293,46.8769875],[-56.0878327,46.877146],[-56.0880559,46.8770697],[-56.0886396,46.8767118],[-56.0895236,46.8764771],[-56.0898154,46.8763011],[-56.0900643,46.8759197],[-56.0904506,46.8756733],[-56.0915664,46.8757554],[-56.0923045,46.8757437],[-56.0929568,46.8755618],[-56.0933002,46.8758024],[-56.0939696,46.8763656],[-56.0944245,46.8769054],[-56.0951026,46.8773689],[-56.0945619,46.8778089],[-56.0939868,46.8784015],[-56.0929483,46.8789295],[-56.0917295,46.8794399],[-56.0907767,46.8796981],[-56.0896781,46.8799797],[-56.0895408,46.8801029],[-56.0891803,46.8802613],[-56.0892404,46.8804549],[-56.0888112,46.88076],[-56.0883048,46.880801],[-56.0880044,46.8810533],[-56.0866397,46.8813232],[-56.0853265,46.8811354],[-56.0846227,46.8810357],[-56.0850347,46.8808069],[-56.084163,46.8808322],[-56.083258,46.8804314],[-56.0830348,46.8801791],[-56.0830434,46.8797333],[-56.0830863,46.8794399],[-56.0837043,46.8792757],[-56.0834468,46.8791994],[-56.0835841,46.8790586],[-56.0833266,46.8789706],[-56.0832665,46.8788239],[-56.0835498,46.8784308],[-56.0830348,46.8786948],[-56.0828202,46.8785071]]]]}},{"type":"Feature","properties":{"name":"fb24ew"},"geometry":{"type":"Polygon","coordinates":[[[-56.09619140625,46.8841552734375],[-56.085205078125,46.8841552734375],[-56.085205078125,46.878662109375],[-56.09619140625,46.878662109375],[-56.09619140625,46.8841552734375]]]}},{"type":"Feature","properties":{"name":"fb24ey"},"geometry":{"type":"Polygon","coordinates":[[[-56.085205078125,46.8841552734375],[-56.07421875,46.8841552734375],[-56.07421875,46.878662109375],[-56.085205078125,46.878662109375],[-56.085205078125,46.8841552734375]]]}},{"type":"Feature","properties":{"name":"fb24et"},"geometry":{"type":"Polygon","coordinates":[[[-56.09619140625,46.878662109375],[-56.085205078125,46.878662109375],[-56.085205078125,46.8731689453125],[-56.09619140625,46.8731689453125],[-56.09619140625,46.878662109375]]]}},{"type":"Feature","properties":{"name":"fb24ev"},"geometry":{"type":"Polygon","coordinates":[[[-56.085205078125,46.878662109375],[-56.07421875,46.878662109375],[-56.07421875,46.8731689453125],[-56.085205078125,46.8731689453125],[-56.085205078125,46.878662109375]]]}}]}

也就是说,首先我从调用的地方得到 Undefined,然后才在这个地方得到工作的结果(顺便说一句,正确的和我需要的)

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Stepan Kasyanenko
    2020-08-29T14:23:11Z2020-08-29T14:23:11Z

    需要给函数传递一个convertMe函数(回调),必须在异步函数结束时调用async.mapSeries。

    例子:

    function convertMe(polygonArray,callbackConvert){
    var toWrite = '';
    var dataToReturn = '';
    
    var polygon = JSON.parse(polygonArray);
    var isFirst = true;
    var printFeature = function (name, poly) {
      var out = {
        "type": "Feature",
        "properties": {
          'name': name,
        },
        "geometry": {
          "type": "Polygon",
          "coordinates": poly
        }
      };
      out = JSON.stringify(out);
      if(!isFirst) {
        out = ',' + out
      }
      isFirst = false;
    
      toWrite = toWrite + out;
    }
    toWrite = toWrite + '{"type": "FeatureCollection","features": [';
    async.mapSeries([polygon], function (poly, cb) {
    
      var options = {
        coords: poly,
        precision: 6,
        rowMode: true,
        hashMode: 'extent',
        threshold: 0.2
      };
      printFeature('shape', poly);
      var rowStream = hasher.stream(options),
        a = 0;
    
      rowStream
        .on('end', cb)
        .pipe(through2.obj(function (arr, enc, callback) {
          for(var i = 0; i < arr.length; i++) {
            var bb = ngeohash.decode_bbox(arr[i]);
            printFeature(arr[i], [
                  [
                    [bb[1], bb[2]],
                    [bb[3], bb[2]],
                    [bb[3], bb[0]],
                    [bb[1], bb[0]],
                    [bb[1], bb[2]]
                  ]]);
          }
          callback();
        }));
    }, function () {
      toWrite = toWrite + ']}';
      callbackConvert(toWrite);// Вызов функции callback при завершении работы.
      console.log('Внутри вызова '+toWrite);
    });
    
    };

    呼叫convertMe和转接callback。

    worldData.features.forEach(function(feature) {
      q.defer(function(done) {
        var dataToConvert = JSON.stringify(feature.geometry.coordinates);
        //Запускаем функцию convertMe и передаем функцию обработчик завершения выполнения
        convertMe(dataToConvert, function(result) {
          console.log('Место вызова ' + result);
          i++;
          done(); //вызвать done, только когда convertMe завершит работу
        });
      });
    });

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5