javascript - 从函数返回 Promise.all

标签 javascript promise

<分区>

我试图用 Promise.all 返回一个 promise ,但由于某种原因,我的 .then 值正在计算为未定义。当它全部内联时,这似乎有效,但据我了解,我应该能够返回最上面的 promise.all,然后像对待任何其他 promise 一样对待它。

function createStreamerArray() {
  const regularStreamers = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"]
  const baseURL = 'https://wind-bow.gomix.me/twitch-api'

  return Promise.all(
    regularStreamers.map(streamer => {
      Promise.all([
        Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)),
        Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
      ]).then(values => {
        return values
      })
    })
  )
}

createStreamerArray().then(values => console.log(values))

最佳答案

首先(也是最重要的)您需要在 .map 回调中返回一个值

这可以像这样完成

regularStreamers.map(streamer => {
  // added return
  return Promise.all([
    Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)),
    Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
  ])
})

或者,使用箭头函数的缩写形式,像这样

//                               { removed
regularStreamers.map(streamer => 
  Promise.all([
    Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)),
    Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
  ])
)
// } removed

其次,(纯粹是为了删除不需要的代码)删除多余的

.then(values => {
    return values
})

这导致:

    function createStreamerArray() {
        const regularStreamers = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
        const baseURL = 'https://wind-bow.gomix.me/twitch-api';
      
        return Promise.all(regularStreamers.map(streamer => Promise.all([
              Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)),
              Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
        ])));
    };
    createStreamerArray().then(values => console.log(values));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

你会看到,有效

关于javascript - 从函数返回 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42546100/

相关文章:

d3.js - 将 d3.csv 转换为 promise?

javascript - 解析 YouTube URL

javascript - 滑动垂直菜单 : prevent the title from moving left on hover

node.js - Sequelize getter 方法中的异步表查询

angular - 如何将 [(ngModel)] 与在组件之后初始化的值一起使用

javascript - 从 Promise 返回对象

javascript - GET http ://js:port/socket. io/1/404 未找到

javascript - ROR 中的 POST 参数无法访问,但在控制台中可见

php - PHP 中的 HTML 净化

javascript - Sweet Alert 2 和 Socket.io 在 preConfirm 中使用发出的结果