这里promise返回的是什么呢?有点晕

来源:6-6 API对接mysql(博客列表)

猪脚面线

2019-06-19

const handleBlogRouter = (req, res) => {
  const method = req.method;
  const id = req.query.id || "";

  // 获取博客列表
  if (method === "GET" && req.path === "/api/blog/list") {
    // 获取参数
    const author = req.query.author || "";
    const keyword = req.query.keyword || "";
    return getList(author, keyword).then((listData) => {
      return new SuccessModel(listData);
    })
  }

handleBlogRouter这个函数的返回值是一个promise,那么返回的是getList函数异步执行后的结果,也就是listData;之后再返回被SuccessModel(listData)包裹后的对象对吗?

问题是app.js里面的blogResult是异步后的结果,这个结果也是promise吗(因为下面被then了。。)

 const blogResult = handleBlogRouter(req, res);
    if (blogResult) {
      blogResult.then(blogData => {
        res.end(JSON.stringify(blogData));
      })
      return
    }

这个环节的promise传递有点晕?老师能帮忙捋一下异步函数的返回吗~

写回答

3回答

qq_漫漫_0

2019-07-29

promise 的then方法默认情况下返回一个resolve状态的新的promise,而且resolve函数的参数是then里面return的值,所以最终结果是返回一个promise,resolve用 SuccessModel格式化了的值

1
1
猪脚面线
感谢 写代码的时候有时会忘记语法细节
2019-07-29
共1条回复

慕设计3041572

2019-07-05

Promise的实例的then方法是定义在原型对象Promise.prototype上的,then方法的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数

then方法返回的是一个新的Promise实例,因此可以采用链式写法,如下

getJSON('/posts.json').then(function(json) {
  return json.post
}).then(function(post) {
  // ...
})

前一个回调函数的返回结果会作为参数传递给下一个回调函数


0
0

猪脚面线

提问者

2019-06-19

是不是这样:router里面返回的promise是getList

return getList(author, keyword).then((listData) => {
    return new SuccessModel(listData);
})

这个异步函数是再app.js里面执行?下面这个blogResult其实就是getList这个异步函数的引用,等到下面blogResult被then的时候才去执行异步函数

const blogResult = handleBlogRouter(req, res);
if (blogResult) {
    blogResult.then(blogData => {
    res.end(JSON.stringify(blogData));
})
    return
}


0
1
双越
你理解正确。当前使用 promise 会很乱,你接着看,后面使用 async-await 就简单了。
2019-06-19
共1条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程