Javascript 从函数返回承诺
我正在尝试返回带有PROMITE.all的PROMITE。但由于某些原因,我的。然后,值的计算结果为未定义。这似乎是工作时,所有的内联,但这是我的理解,我应该能够返回的最高承诺。所有,然后对待它像任何其他承诺Javascript 从函数返回承诺,javascript,promise,Javascript,Promise,我正在尝试返回带有PROMITE.all的PROMITE。但由于某些原因,我的。然后,值的计算结果为未定义。这似乎是工作时,所有的内联,但这是我的理解,我应该能够返回的最高承诺。所有,然后对待它像任何其他承诺 function createStreamerArray() { const regularStreamers = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "Robot
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
。全部([
-以便您的地图实际返回一些东西-或者删除{}
它包装了内部的承诺。所有的都很好,但是多余的代码作为占位符存在其中。我实际上不想返回值。我想将它们组合到另一个对象中并返回,但我试图让其余的先工作。