为了账号安全,请及时绑定邮箱和手机立即绑定

.then的返回值如何被函数return?

.then的返回值如何被函数return?

HUH函数 2019-04-27 22:19:52
代码如下:functionitem(args){varposttitle;letp=newPromise((resolve,reject)=>{hexo.extend.filter.register('after_post_render',function(post){posttitle=post.title;resolve(posttitle);//这里的post是文章的数据,而post.title则是文章的标题...});})p.then((value)=>{console.log(value);})returnvalue;//如何return.then的value值?}需要大家的帮助!~T-T...非常感谢!~
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

Promise中处理的是一个异步调用,异步调用是非阻塞式的,也就是说,你在调用的时候并不知道它什么时候结束,当然也就不会等到他返回一个有效数据之后再进行下一步处理。但是——
异步调用的内容是知道什么时候结束的,它结束之后可以发出通知。我们一般使用回调函数来获得这个通知,比如
functionitem(args,callback){//<--注意callback传入一个处理函数
//....
p.then((value)=>{
console.log(value);
callback(value);//<--取得值之后通过回调进行下一步处理
});
}
item(blabla,
(value)=>console.log(`got${value}`)//<--这就是上面提到的callback
);
不过除非特殊情况,一般不应该把Promise处理成回调,而应该直接返回Promise,以便后续进行基于Promise规范的处理,比如
functionitem(args){//<--它返回一个Promise
//....
returnp.then((value)=>{
console.log(value);
returnvalue;
});
}
//继续按Promise规划在外面进行处理
item.then(value=>console.log(`got${value}`));
这样写起来似乎不是很符合常见的同步代码编写习惯,那可以用async/await,具体参考阅读:
理解JavaScript的async/await
                            
查看完整回答
反对 回复 2019-04-27
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

嗯,我想说的是不能直接在then里面用吗?
functionitem(){
returnnewPromise(resolve=>{
resolve('aaaa')
}
)
}
item().then(value=>{
console.log(value);
})
或者是你直接用个延时去取?
                            
查看完整回答
反对 回复 2019-04-27
  • 2 回答
  • 0 关注
  • 276 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信