Concat json to promise:如何从promise挂起的json对象中获取额外的键值对

Posted

技术标签:

【中文标题】Concat json to promise:如何从promise挂起的json对象中获取额外的键值对【英文标题】:Concat json to promise: How to get additional key value pair in json object from promise pending 【发布时间】:2021-09-25 15:49:48 【问题描述】:

我手动将一个 json 对象连接到一个 Promise。下面第一次打印的代码 cosole.log(new_response) 让我得到了这个,这就是我想要的

Promise  <pending>, a: '123' 

但是,第二次打印 cosole.log(data_json_array) 让我得到没有键值的 json 对象,a: '123'

我不知道这是为什么。我希望 json 对象包含键值 a: '123' 例如:

 
  key1: "1",
  key2: "2",
  a: "123

提前致谢。

Promise.all(somefunction(parameter)).then(function (responses) 

        return Promise.all(responses.map(function (response) 

            new_json = a: "123"
            var new_response = Object.assign(response.json(), new_json)
            console.log(new_response)
            return new_response

      .then(function (data) 

        console.log(data)

    )

【问题讨论】:

someFunction 是返回单个承诺还是一组承诺? Promise.all 通常用于一系列承诺。 因为response.json()也是一个承诺。 @AlexanderStaroselsky 这取决于我调用了多少个网址。如果有两个 url,则返回 Promise , a: '123' Promise , a: '123' 另外, a: "123" 只是为了演示目的,实际上,我调用的不同 url 的键值会发生变化。比如我要添加的json对象可以是url: "the-actual-url" @Andy 是否可以将 new_json 连接到 new_response 以便它们成为 .then() 中的一个 json 对象? 【参考方案1】:

稍微不同的方法可能涉及更新someFunction 以处理 json() 并处理将数据与提供的 url 合并。这可以帮助避免嵌套Promise.all

function someFunction(parameter) 
  // create array of promises
  return parameter.urls.map((url) =>
    fetch(url)
      // parse JSON
      .then((res) => res.json())
      // Merge data with url property
      .then((data) => ( ...data, url ))
  );


Promise.all(
  someFunction(
    urls: [
      "https://jsonplaceholder.typicode.com/todos/1",
      "https://jsonplaceholder.typicode.com/todos/2",
    ],
  )
).then((data) => console.log(data));

希望对您有所帮助!

【讨论】:

谢谢!我会看看如何集成到我的代码中,让你知道结果。非常感谢。 太棒了。关键是您可以在 someFunction 中做更多事情,因为它创建了承诺并具有参数。您始终可以在消费者中执行附加对象分配以合并其他数据,但这样您就不必在消费者级别处理 json()。 回来说声谢谢!我已成功集成到我的代码中! @Alexander Staroselsky

以上是关于Concat json to promise:如何从promise挂起的json对象中获取额外的键值对的主要内容,如果未能解决你的问题,请参考以下文章

将 Hive 查询转换为雪花

Promise Catch 在 json rpc 调用中未收到错误

如何返回 Promise.all 获取 api json 数据?

如何在 bigquery 中使用 group_concat 生成 json 字符串?

如何将 promise 对象中返回的 JSON 对象分配给全局变量?

如何使用 PromiseKit 6.3 返回 Promise<JSON>