javascript --- > 使用run函数,让100条ajax依次执行

使用如下:

function *foo(len,urlArray) {
    let r = [];
    for(let i =0; i< len; i++){
        r[i] = yield request(urlArray[i]);
    }
}
// len:是长度,urlArray,是请求的url数组..

下面附上run函数的代码,以及证明以上是成立的

// Benjamin Gruenbaum(@benjamingr on Github)
function run(gen) {
    var args = [].slice.call(arguments, 1), it;
    
    it = gen.apply(this, args);
     
    return Promise.resovle()
        .then(function handleNext(value) {
            var next = it.next(value);
             
            return (function handleResult(next) {
                if( next.done) {
                    return next.value;
                } else{
                    return Promise.resolve(next.value)
                        .then(
                            handleNext,
                             
                            function handleErr(err) {
                                return Promise.resolve(
                                    it.throw(err)
                                ).then(handleResult);
                            }
                        };
               }
           })(next);
     });
}
// emmmm,这个run我是没有看懂的,也不想检查有没有打错....其实我想说的是..利用Promise并发.

考察下面函数:

function *foo(){
    var r1 = yield request("http://some.url.1");
    var r2 = yield request("http://some.url.2");
     
    var r3 = yield request(
        "http://some.url.3/?v=" + r1 + "," + r2
    );
     
    console.log(r3);
}
run(foo);
// 以上2个ajax请求是依此进行的.即:r1完成后,r2开始...
// 高效的程序是让r1和r2同时进行(并发)
// 改写如下:
function *foo(){
    var p1 = request("http://some.url.1");
    var p2 = request("http://some.url.2");
     
    var r1 = yield p1;
    var r2 = yield p2;
     
    var r3 = yield request(
        "http://some.url.3/?v=" + r1 + "," + r2
    );
     
    console.log(r3);
}
run(foo);

// 同时发出2个ajax请求.使用yield语句等待promise的决议.

这个也很像Promise.all方法

function *foo(){
    var results = yield Promise.all([
        request("http://some.url.1"),
        request("http://some.url.2")
    ]);
     
    var r1 = results[0];
    var r2 = results[1];
   
    var r3 = yield request(
        "http://some.url.3/?v=" +r1 + "," +r2
    );
     
    console.log(r3);
} 

run(foo);

更理想的情况是,我们希望使用bar()给我们结果(通过yield来等待),而不关心底层到底是使用Promise.all还是Promise.

function bar(url1, url2) {
    return Promise.all([
        request(url1),
        request(url2)
    ]);
}

function *foo(){
    var results = yield bar(
        "http://some.url.1",
        "http://some.url.2"
    );
     
    var r1 = results[0];
    var r2 = results[1];
     
    var r3 = yield request(
        "http://some.url.3/?v=" + r1 + "," + r2
    );
    
    console.log(r3);
}
run(foo);
// 使用bar将Promise层封装起来,不需要关心底层的实现.
// 如果将Promise直接放在生成器内部的话,在高层次的任务表达中逻辑会变得混乱

参考《你不知道的JavaScript》(中卷)P256~P261

首先,需要在 Python 中安装 Flask 或 Django 等 Web 框架来处理 HTTP 请求。以 Flask 为例,以下是一个简单的示例: ```python from flask import Flask, request app = Flask(__name__) @app.route('/post', methods=['POST']) def post(): data = request.json # 处理数据 return 'success' if __name__ == '__main__': app.run() ``` 在这个示例中,我们创建了一个名为 app 的 Flask 实例,并定义了一个 /post 的路由,该路由只接受 POST 请求。当有 POST 请求到达时,Flask 将自动解析请求体中的 JSON 数据,并将其作为 python 字典类型存储在 request.json 中。我们可以在 post() 函数中访问这个字典,从而对数据进行处理。最后,将 'success' 字符串作为响应返回。 在前端部分,可以使用 jQuery 的 $.ajax() 方法来发送 POST 请求,如下所示: ```javascript $.ajax({ url: '/post', type: 'POST', contentType: 'application/json', data: JSON.stringify({key1: 'value1', key2: 'value2'}), success: function(response) { console.log(response); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); } }); ``` 在这个示例中,我们将请求的 URL 设置为 /post,请求类型设置为 POST,并将请求的数据设置为一个包含 key1 和 key2 两个字段的 JSON 对象。注意,我们还需要将 contentType 设置为 application/json,以便告诉服务器发送的数据是 JSON 格式。如果请求成功,控制台将打印 'success';否则,将打印请求失败的错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值