请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

3回答

qq_漫漫_0 2019-07-29 10:36:26

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

1 回复 有任何疑惑可以回复我~
  • 提问者 猪脚面线 #1
    感谢 写代码的时候有时会忘记语法细节
    回复 有任何疑惑可以回复我~ 2019-07-29 23:16:41
慕设计3041572 2019-07-05 19:43:12

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

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

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

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


0 回复 有任何疑惑可以回复我~
提问者 猪脚面线 2019-06-19 18:11:28

是不是这样: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 19:33:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信