Javascript 从函数返回承诺

Javascript 从函数返回承诺,javascript,promise,Javascript,Promise,我正在尝试返回带有PROMITE.all的PROMITE。但由于某些原因,我的。然后,值的计算结果为未定义。这似乎是工作时,所有的内联,但这是我的理解,我应该能够返回的最高承诺。所有,然后对待它像任何其他承诺 function createStreamerArray() { const regularStreamers = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "Robot

我正在尝试返回带有PROMITE.all的PROMITE。但由于某些原因,我的。然后,值的计算结果为未定义。这似乎是工作时,所有的内联,但这是我的理解,我应该能够返回的最高承诺。所有,然后对待它像任何其他承诺

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函数中添加额外的返回?如果不返回第二个Promise.all,那么您将看不到您的值。

首先(也是最重要的),您需要在
.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
或者,使用箭头函数的缩写形式,如下所示

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
})
这导致:

函数createStreameraray(){
const regularStreamers=[“ESL_SC2”、“OgamingSC2”、“cretetion”、“freecodecamp”、“storbeck”、“habathcx”、“RobotCaleb”、“Noobs2 Injas”];
常量baseURL=https://wind-bow.gomix.me/twitch-api';
返回Promise.all(regularStreamers.map)(拖缆=>Promise.all([
Promise.resolve($.getJSON(baseURL+'/users/'+streamer+'?回调=?',null)),
Promise.resolve($.getJSON(baseURL+'/streams/'+streamer+'?回调=?',null))
])));
};
createStreameraray()。然后(值=>console.log(值))

首先,您可以删除
。然后(values=>{return values})
-不过,这不会解决任何问题(但会使代码不那么不正确:)在“内部”
承诺之前添加
return
。全部([
-以便您的地图实际返回一些东西-或者删除
{}
它包装了内部的
承诺。所有的
都很好,但是多余的代码作为占位符存在其中。我实际上不想返回值。我想将它们组合到另一个对象中并返回,但我试图让其余的先工作。