搜索
node.js - 求解 你不知道的JavaScript中 Generator+Promise的一段示例代码
某草草
某草草 2017-06-15 09:21:42
[JavaScript讨论组]
function foo(x,y) {
    return request(
        //request是一个Promise对象
        "http://some.url.1/?x=" + x + "&y=" + y
    );
}

function *main() {
    try{
        var text = yield foo( 11, 31 );
        //在yield处暂停后 yield需要等待第二次next()传值 text应该没有被赋值
        console.log( text );
    }
    catch (err) {
        console.error( err );
    }
}

var it = main();

var p = it.next().value;
//等待promise p决议
p.then(
    function (text) {
        it.next( text );
        //这里拿到的 text 应该没有赋到值呀
    },
    
    function (err) {
        it.throw( err );
    }
);

这是你不知道的JavaScript 生成器+Promise 小节中的一段示例代码
**其中 text 应该拿到的是yield 的值 而yield 应该需要第二个next()去赋值 那么 text应该是undefined 这里我就看不懂了 求解!**
某草草
某草草

全部回复(2)
ringa_lee

第一个迭代器的next调用后会执行到第一个yield这里,这时候并未赋值,而是返回了一个基于promise的ajax函数
这个promise决议后会将ajax请求的返回值作为参数的形式赋值给then中第一个函数作为参数
像这样

(() => new Promise((resolve => { resolve("我是参数"); })))().then(data => console.log(data), err => { throw err; })    //"我是参数"

接下来会把这个参数赋值与第一个yield的位置并执行完这个函数

天蓬老师

//这里拿到的 text 应该没有赋到值呀

理解错误了,text 就是 request 成功的结果,建议你把 Promise 再理解一遍

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号