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

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

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

慕哥9229398 2019-03-25 10:35:29
代码如下: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,具体参考阅读:


查看完整回答
反对 回复 2019-03-25
?
神不在的星期二

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

嗯,我想说的是不能直接在then里面用吗?

function item(){    return new Promise(resolve => {
            resolve('aaaa')
        }
    )
}

item().then(value=> {    console.log(value);
})

或者是你直接用个延时去取?


查看完整回答
反对 回复 2019-03-25
  • 2 回答
  • 0 关注
  • 1781 浏览
慕课专栏
更多

添加回答

举报

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