gpt4 book ai didi

javascript - Meteor - 在客户端异步回调的 for 循环之后运行代码

转载 作者:行者123 更新时间:2023-11-29 18:10:07 25 4
gpt4 key购买 nike

在 Meteor 中,我有一个充满异步地理编码请求的 for 循环,这些请求被发送到 google maps api。所有地理编码完成后,我想显示一个包含所有失败的地理编码尝试的表格。最好的模式是什么?据我了解,我有 3 个选择:

  1. Promises - 我可以将 google maps 回调设置为 promise 并使用 thenable 返回错误 bool 值,可能使用 bluebird polyfill。

  2. NPM async - 我可以在每次迭代时调用 async.each,如果是最后一次,则返回错误 bool 值,如下所示:How to call a function after an asynchronous for loop of Object values finished executing

  3. 像这样使用 session 变量:

    Deps.autorun(函数() {
    console.log(Session.get('hasError'));
    });

  4. 创建一个 meteor 方法并使用Meteor.wrapasync调用它???

任何关于 Meteor 最佳实践的指导都会很棒,谢谢!

最佳答案

我会这样做:

// Local collection, not synced to server
var geocodeErrors = new Mongo.Collection();

// Reactive variable to track completion
var geocodingComplete = new ReactiveVar(false);

var lookupThings = function (addresses) {
// How many are there?
var count = addresses.length;

// Count how many requests are complete
var complete = 0;

// Use underscore to make iteration easier
_.each(addresses, function (address) {
geocode(address, function (results, status) {
if (status === "OK") {
// do whatever
} else {
geocodeErrors.insert({
address: address,
otherData: "whatever"
});
}

complete++;
if (complete === count) {
geocodingComplete.set(true);
}
});
});
}

Template.results.helpers({
geocodeErrors: function () {
// Use an if statement to only display the errors when everything is done
if (geocodingComplete.get()) {
return geocodeErrors.find();
}
}
});

您可以使用此模板来显示列表:

<template name="results">
<ul>
{{#each geocodeErrors}}
<li>Address failed: {{address}}</li>
{{/each}}
</ul>
</template>

我认为主要的收获是 Meteor 风格是使用 react 变量和集合而不是回调。

关于javascript - Meteor - 在客户端异步回调的 for 循环之后运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28122252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com