喊人做网站需要注意些什么,搜狗搜索网,wordpress 国外 服务器,小型企业网站建设项目WritableStream有两个对象参数#xff1a; 第一个必选#xff0c;用于配置一些写入流时的钩子#xff1b; 第二个可选#xff0c;用于配置一些chunk入队和队列控制的策略#xff1b; 第二个参数的策略#xff08;利用ByteLengthQueuingStrategy【按字节计量】和CountQueu…WritableStream有两个对象参数 第一个必选用于配置一些写入流时的钩子 第二个可选用于配置一些chunk入队和队列控制的策略 第二个参数的策略利用ByteLengthQueuingStrategy【按字节计量】和CountQueuingStrategy【按元素数量计量】接口去定义策略两种
在第一个参数必选中所有的对象字段都是可选的可以单选也可以全部如下 start(controller)在WritableStream对象完成构造后立即调用controller method执行一次 write(chunk,controller)每当一个新的chunk准备写入接收器的时候将调用方法 close(controller)当结束写入流时候调用该方法 abort(reason)当写入流被中断或者写入流进入错误状态的时候调用该方法
如下面的例子 //写入流要插入的页面 !DOCTYPE html
htmlheadmeta http-equivcontent-type contenttext/html charsetutf-8/titlejavascript写入流测试/title/headbodydiv idstreamul idlistStream/ul/div/bodyscript typetext/javascript srctest.js/script/html//这里是上面html的javascript代码
//插入数字的异步函数
async function* ints(){for(let i0;i5;i){const textEncodernew TextEncoder();const encodedTexttextEncoder.encode(i);for(let x of encodedText){yield await new Promise((resolve,reject)setTimeout(resolve,200,x));}}
}
//插入字符串的异步函数
async function* strs(str)
{for(let i0,lenstr.length;ilen;i){const textEncodernew TextEncoder();const encodedTexttextEncoder.encode(str[i]);for(let x of encodedText){yield await new Promise((res,rej)setTimeout(res,100,x));}}
}//解码二进制字符流
const decodernew TextDecoder();
//这个是第二参数的可选策略我们选按元素计量
const queuingStrategynew CountQueuingStrategy({highWaterMark:1});
let result;
//获取到我们在html页面中的容器元素
let listdocument.getElementById(listStream);
//写入二进制流
const writableStreamnew WritableStream({//写入方法write(chunk){return new Promise((resolve,reject){//设置一个定型数组在内存中分配一个字节const buffernew ArrayBuffer(1);//设置一个无符号1个字节缓冲const viewnew Uint8Array(buffer);//为1个字符赋值view[0]chunk;//解码二进制文字或数字const decodeddecoder.decode(view,{stream:true});//创建元素const listItemdocument.createElement(li);listItem.textContentChunk decoded:${decoded};list.appendChild(listItem);//将所有解码的字符或数字串连起来resultdecoded;//完成期约resolve();});},//所有的字符流或数字流完成后关闭流close(){const listItemdocument.createElement(li);listItem.textContent[message received]${result};list.appendChild(listItem);},//发生错误时abort(err){console.error(sink error:,err);}},//写入流的第二个参数queuingStrategy,
);
//查看写入流锁的状态
console.log(writableStream.locked);
//getWriter()获得写入流的锁锁定写入
const writableStreamDefaultWritewritableStream.getWriter();
console.log(writableStream.locked);
//自闭异步函数执行写入操作这里用的是字符串strs()函数你可以用数字函数ints()
(async function(){for await (let chunk of strs(javascript ok)){await writableStreamDefaultWrite.ready;writableStreamDefaultWrite.write(chunk);}writableStreamDefaultWrite.close();
})();//最后输出是这样 Chunk decoded:j Chunk decoded:a Chunk decoded:v Chunk decoded:a Chunk decoded:s Chunk decoded:c Chunk decoded:r Chunk decoded:i Chunk decoded:p Chunk decoded:t Chunk decoded: Chunk decoded:o Chunk decoded:k [message received]javascript ok