promise.then返回新Promise时如何携带自定义值解决结果为undefined问题
问题原因
async函数默认返回规则问题:你的main函数没有显式返回sleep链式调用产生的Promise,async函数在无return语句时,返回的Promise会自动resolve为undefined,这就是你最后在main().then()中拿到undefined的核心原因。你需要将sleep(...).then(...)的执行结果return出去,才能让main返回的Promise携带你自定义的返回值。sleep函数实现错误:你当前写的setTimeout(resolve(input), timeout)会立即执行resolve(input),而不是等待指定超时时间后触发,相当于给setTimeout传入了resolve执行后的返回值(undefined),完全没有延迟效果。正确写法需要给setTimeout传入一个回调函数,等超时后再执行resolve逻辑。
修改后的完整代码
function sleep(input, timeout) { return new Promise(resolve => { // 改为回调形式,延迟触发resolve setTimeout(() => resolve(input), timeout) }); } async function main() { // 显式返回链式调用的Promise return sleep(['a','b'],1000) .then(([first, second]) => { console.log(first) console.log(second); return [first+'t', second]; }); } main() .then(res => { console.log(res); })
运行输出
a b ['at', 'b']
内容的提问来源于stack exchange,提问作者icelemon
相关产品推荐
相关产品推荐

