我正在遵循一个教程,其中请求来自git API的数据,并且评分算法将订购该数据。
战斗函数将采用两个元素的数组,即两个github用户。我们从getUserData方法
中检索eah用户的配置文件和分数module.exports = {
battle: function(players) {
return axios.all(players.map(getUserData))
.then(response => {
response.forEach( each=>console.log(each));
return response;
})
}
}
getProfile和getRepos函数正确地检索具有用户配置文件(用户名,关注者等)及其repos(repo名称等)数据的对象。所以我省略了这两个函数的代码,因为我已经知道它们可以正常工作。此外,calculateScore方法也可以正常工作并按预期返回输出。
console.log语句显示正确创建了具有“profile”和“score”键的对象,并按预期打印出配置文件对象数据和分数。到目前为止一切都很好。
function getUserData(player) {
axios.all([
getProfile(player),
getRepos(player)
])
.then(function(data) {
var profile = data[0];
var repos = data[1];
console.log({
profile: profile,
score: calculateScore(profile, repos)
})
return {
profile: profile,
score: calculateScore(profile, repos)
}
})
}
问题:
“战斗”中的回调函数应该接收一个大小为2的数组,每个元素包含该特定玩家的个人资料和分数。 e.g:
[
{
profile: {profile data for player1...}
score: 10 //or whatever the score is
},
{
profile: {profile data for player2...}
score: 2 //or whatever the score is
}
]
但是回调函数接收[undefined,undefined]作为axios.all函数的输入
如果我错了,请纠正我,但在承诺中,不是“axios.all”方法的输出应该是“then”方法的输入。那么,如果console.log语句显示axios.all正在输出正确的数据,为什么我会得到未定义?
答案 0 :(得分:2)
您的getUserData
函数不会返回任何内容。将其更改如下:
function getUserData(player) {
return axios.all([
// ...
]);
}
这种行为是因为当您undefined
response.map
时,如果您使用undefined
替换所有项目,则会返回console.log
值数组undefined
返回module.exports = {
battle: function(players) {
return axios.all(players.map(getUserData))
.then(response => {
response.forEach(each => console.log(each));
return response;
});
}
}
)。
相反,返回异步调用的实际结果:
import requests
import webbrowser
s=requests.session()
login_data = dict(email='email', password= 'password')
s.post("https://www.otoservisbul.com/tr/login", data=login_data)
r = requests.post('https://www.otoservisbul.com/tr/login', data = {'email':'password'})
webbrowser.get(using='chrome').open("https://www.otoservisbul.com/tr/items/list")