首页 > 解决方案 > 使用 promise .then 返回 promise 并包装之前的响应

问题描述

据我了解,promise.then返回一个新的承诺。但是如何用一个值返回这个承诺。这是我的示例代码

function sleep(input, timeout) {
  return new Promise(resolve => {
    setTimeout(resolve(input), timeout)});
}

async function main() {
  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
undefined

预期的

a
b
['at', 'b']

标签: node.jspromise

解决方案


console.log(res)你想打印函数sleep.then(...)内部返回的值main()。但是,该函数没有返回该值。实际上,它没有返回任何东西resundefined.

在里面main(),你应该返回sleep.then(...)。这样,res将是该承诺返回的值。

function sleep(input, timeout) {
  return new Promise(resolve => {
    setTimeout(resolve(input), timeout)});
}

async function main() {
  return sleep(['a','b'],1000)
  .then(([first, second]) => {
    console.log(first)
    console.log(second);
    return [first+'t', second];
  });
}
main()
.then(res => {
  console.log(res);
})


推荐阅读