我对这段代码很困惑,可能是因为我是初学者。无论如何,我的问题是:
1.(我在代码中没有提到视频,但我在数组中提到了video1、video2和video3。我还编写了一个名为getUserVideos的函数。当我写getUserVideos(user.userEmail,videos=>console.log(视频(;})它会自动显示结果吗?
2.(为什么我需要console.log(用户(两次?然后再次执行getUserVideos(user.userEmail,videos=>console.log(视频(;})?
console.log('start');
function loginUser(email, password, callback){
setTimeout(() => {
callback({ userEmail: email });
},3000);
}
function getUserVideos(email,callback) {
setTimeout(() => {
callback (["video1","video2","video3"]);
},2000)
}
const user = loginUser('labeeb@staffasia.org', 123456, user => {
console.log(user);
getUserVideos(user.userEmail, videos =>{
console.log(videos);
})
});
console.log(user);
console.log('finish');
对代码的完整解释将不胜感激。
在最近的一次问答中;A我解释了为什么Promise是现代JavaScript中异步控制流的事实选择。正如你的例子中所看到的,连续传球风格是一种很好的学习练习,但也有很多陷阱,对初学者来说非常困难。这是用promise
和async-await
标记的,所以我将展示在没有延续传递样式的情况下代码的样子
function sleep(ms) {
return new Promise(r => setTimeout(r, ms))
}
async function loginUser(email, password) {
await sleep(3000)
return { userEmail: email }
}
async function getUserVideos (email) {
await sleep(2000)
return ["video1", "video2", "video3"]
}
async function main() {
console.log("start")
const user = await loginUser("labeeb@staffasia.org", 123456)
console.log(user)
const videos = await getUserVideos(user.userEmail)
console.log(videos)
return "finish"
}
main().then(console.log, console.error)