与承诺中的 .then() 混淆
confused with .then() in promises
我是 js 新手,正在学习 promises。我想出了这段代码,它将打印每个函数的解析值,并使用 .then
调用新函数
function login() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({username : 'default'})
}, 1000)
})
}
function getVideos() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(['vid1', 'vid2'])
},1000)
})
}
function getDesc() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('desc')
}, 1000)
})
}
const test = login()
test.then(res => {
console.log(res)
getVideos()
})
.then(res => {
console.log(res)
getDesc()
})
.then(res => console.log(res))
但是,我没有得到预期的结果,我认为 .then()
中的所有语句都需要执行并解析才能继续下一个 .then()
语句。但显然这里不是这种情况,因为我得到以下输出 -
{ username: 'default' }
undefined
undefined
但我希望输出与此类似 -
{username : 'default}
['vid1', 'vid2']
desc
请指出我在这里出错的地方。感谢任何帮助,非常感谢
调用这些函数时,您需要将 return
添加到链中。例如:
function login() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({username : 'default'})
}, 1000)
})
}
function getVideos() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(['vid1', 'vid2'])
},1000)
})
}
function getDesc() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('desc')
}, 1000)
})
}
const test = login()
test.then(res => {
console.log(res)
return getVideos()
})
.then(res => {
console.log(res)
return getDesc()
})
.then(res => console.log(res))
这是一个很好的指南:https://javascript.info/promise-chaining
进行一些非常小的更改:
const test = login()
test.then(res => {
console.log(res)
return getVideos()
})
.then(res => {
console.log(res)
return getDesc()
})
.then(res => console.log(res))
要将 promises 链接在一起,您需要 return 在每个步骤中都使用 promises。事实上,你隐含地 returning undefined
这不是一个承诺。
我是 js 新手,正在学习 promises。我想出了这段代码,它将打印每个函数的解析值,并使用 .then
function login() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({username : 'default'})
}, 1000)
})
}
function getVideos() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(['vid1', 'vid2'])
},1000)
})
}
function getDesc() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('desc')
}, 1000)
})
}
const test = login()
test.then(res => {
console.log(res)
getVideos()
})
.then(res => {
console.log(res)
getDesc()
})
.then(res => console.log(res))
但是,我没有得到预期的结果,我认为 .then()
中的所有语句都需要执行并解析才能继续下一个 .then()
语句。但显然这里不是这种情况,因为我得到以下输出 -
{ username: 'default' }
undefined
undefined
但我希望输出与此类似 -
{username : 'default}
['vid1', 'vid2']
desc
请指出我在这里出错的地方。感谢任何帮助,非常感谢
调用这些函数时,您需要将 return
添加到链中。例如:
function login() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({username : 'default'})
}, 1000)
})
}
function getVideos() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(['vid1', 'vid2'])
},1000)
})
}
function getDesc() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('desc')
}, 1000)
})
}
const test = login()
test.then(res => {
console.log(res)
return getVideos()
})
.then(res => {
console.log(res)
return getDesc()
})
.then(res => console.log(res))
这是一个很好的指南:https://javascript.info/promise-chaining
进行一些非常小的更改:
const test = login()
test.then(res => {
console.log(res)
return getVideos()
})
.then(res => {
console.log(res)
return getDesc()
})
.then(res => console.log(res))
要将 promises 链接在一起,您需要 return 在每个步骤中都使用 promises。事实上,你隐含地 returning undefined
这不是一个承诺。