gpt4 book ai didi

Javascript 异步调用链接

转载 作者:行者123 更新时间:2023-11-30 12:36:18 25 4
gpt4 key购买 nike

给定一个包含类型 A 和 B 的对象的数组,其中 B 可以通过异步调用转换为一组 A 类型的对象,这将是将数组转换为全 A 对象数组的最佳方式(转换一组对应的 A 对象中的每个 B 对象)并在转换 B 时执行回调?

    list = [A, B, A, B, A, A, B, A];

function transform (B, callback) {
//transform B type object into A type objects array [A, A, A].....
callback([A, A, A]);
}

transformBObjectsIntoAObjects(list, callback) {
// ?????????
callback(list); // this should only be A type objects
}

最佳答案

好吧,您需要在 transformBtoList 中的所有回调都返回结果后执行最终回调。有多种方法可以做到这一点:

  1. 计算您已经传递了多少回调并在它们回调时递减,当计数器再次归零时您就知道您完成了。

    但是,这很麻烦,有一些库可以帮助您:

  2. async.js众所周知且易于使用:

    function transform(B, callback) { … }
    function transformBObjectsIntoAObjects(list, callback) {
    async.map(list, function(X, cb) {
    if (X is B)
    transform(X, cb)
    else
    cb([X])
    }, function(results) {
    callback(concat(results))
    }
    }
  3. Promises(有 many implementations 是一种更好的方法。它们可能理解起来有点复杂,但具有非常好的属性并导致漂亮和简洁的语法。在你的情况下,它会是

    function transform(B) { // no callback!
    // async:
    resolve([A, A, A]); // see docs of your promise library
    return promise; // for exact reference
    }
    function transformBObjectsIntoAObjects(list) {
    return Promise.all(list.map(function(X) {
    return (X is B) ? transform(X) : Promise.resolve([X]);
    })).then(concat);
    }

关于Javascript 异步调用链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973619/

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