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

代码如下:

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...非常感谢!~


慕哥9229398
浏览 1782回答 2
2回答

呼唤远方

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

神不在的星期二

嗯,我想说的是不能直接在then里面用吗?function&nbsp;item(){&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise(resolve&nbsp;=>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve('aaaa') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;) } item().then(value=>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;console.log(value); })或者是你直接用个延时去取?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript