代码如下:function item(args){ var posttitle; let p = new Promise((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);
}) return value; //如何return .then的value值?}需要大家的帮助!~T-T...非常感谢!~
2 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
Promise 中处理的是一个异步调用,异步调用是非阻塞式的,也就是说,你在调用的时候并不知道它什么时候结束,当然也就不会等到他返回一个有效数据之后再进行下一步处理。但是——
异步调用的内容是知道什么时候结束的,它结束之后可以发出通知。我们一般使用回调函数来获得这个通知,比如
function item(args, callback) { // <-- 注意 callback 传入一个处理函数 // .... p.then((value) => { console.log(value); callback(value); // <-- 取得值之后通过回调进行下一步处理 }); } item(blabla, (value) => console.log(`got ${value}`) // <-- 这就是上面提到的 callback);
不过除非特殊情况,一般不应该把 Promise 处理成回调,而应该直接返回 Promise,以便后续进行基于 Promise 规范的处理,比如
function item(args) { // <-- 它返回一个 Promise // .... return p.then((value) => { console.log(value); return value; }); }// 继续按 Promise 规划在外面进行处理item.then(value => console.log(`got ${value}`));
这样写起来似乎不是很符合常见的同步代码编写习惯,那可以用 async/await,具体参考阅读:
神不在的星期二
TA贡献1963条经验 获得超6个赞
嗯,我想说的是不能直接在then里面用吗?
function item(){ return new Promise(resolve => { resolve('aaaa') } ) } item().then(value=> { console.log(value); })
或者是你直接用个延时去取?
添加回答
举报
0/150
提交
取消