当前位置: 首页 > news >正文

怎么利用网站开发app营销推广app

怎么利用网站开发app,营销推广app,公司建设网站的申请,需要多少钱一、终极解决 异步操作是 JavaScript 编程的麻烦事#xff0c;麻烦到一直有人提出各种各样的方案#xff0c;试图解决这个问题。 从最早的回调函数#xff0c;到 Promise 对象#xff0c;再到 Generator 函数#xff0c;每次都有所改进#xff0c;但又让人觉得不彻底。…一、终极解决 异步操作是 JavaScript 编程的麻烦事麻烦到一直有人提出各种各样的方案试图解决这个问题。 从最早的回调函数到 Promise 对象再到 Generator 函数每次都有所改进但又让人觉得不彻底。它们都有额外的复杂性都需要理解抽象的底层运行机制。 异步I/O不就是读取一个文件吗干嘛要搞得这么复杂异步编程的最高境界就是根本不用关心它是不是异步。 async 函数就是隧道尽头的亮光很多人认为它是异步操作的终极解决方案。 二、async 函数是什么 一句话async 函数就是 Generator 函数的语法糖。 前文有一个 Generator 函数依次读取两个文件。 var fs require(fs); var readFile function (fileName){return new Promise(function (resolve, reject){fs.readFile(fileName, function(error, data){if (error) reject(error);resolve(data);});}); }; var gen function* (){var f1 yield readFile(/etc/fstab);var f2 yield readFile(/etc/shells);console.log(f1.toString());console.log(f2.toString()); };写成 async 函数就是下面这样。 var asyncReadFile async function (){var f1 await readFile(/etc/fstab);var f2 await readFile(/etc/shells);console.log(f1.toString());console.log(f2.toString()); };一比较就会发现async 函数就是将 Generator 函数的星号*替换成 async将 yield 替换成 await仅此而已。 三、async 函数的优点 async 函数对 Generator 函数的改进体现在以下三点。 1内置执行器。 Generator 函数的执行必须靠执行器所以才有了 co 函数库而 async 函数自带执行器。也就是说async 函数的执行与普通函数一模一样只要一行。 var result asyncReadFile(); 2更好的语义。 async 和 await比起星号和 yield语义更清楚了。async 表示函数里有异步操作await 表示紧跟在后面的表达式需要等待结果。 3更广的适用性。 co 函数库约定yield 命令后面只能是 Thunk 函数或 Promise 对象而 async 函数的 await 命令后面可以跟 Promise 对象和原始类型的值数值、字符串和布尔值但这时等同于同步操作。 四、async 函数的实现 async 函数的实现就是将 Generator 函数和自动执行器包装在一个函数里。 async function fn(args){// ... } // 等同于 function fn(args){ return spawn(function*() {// ...}); }所有的 async 函数都可以写成上面的第二种形式其中的 spawn 函数就是自动执行器。 下面给出 spawn 函数的实现基本就是前文自动执行器的翻版。 function spawn(genF) {return new Promise(function(resolve, reject) {var gen genF();function step(nextF) {try {var next nextF();} catch(e) {return reject(e); }if(next.done) {return resolve(next.value);} Promise.resolve(next.value).then(function(v) {step(function() { return gen.next(v); }); }, function(e) {step(function() { return gen.throw(e); });});}step(function() { return gen.next(undefined); });}); }async 函数是非常新的语法功能新到都不属于 ES6而是属于 ES7。目前它仍处于提案阶段但是转码器 Babel 和 regenerator 都已经支持转码后就能使用。 五、async 函数的用法 同 Generator 函数一样async 函数返回一个 Promise 对象可以使用 then 方法添加回调函数。当函数执行的时候一旦遇到 await 就会先返回等到触发的异步操作完成再接着执行函数体内后面的语句。 下面是一个例子。 async function getStockPriceByName(name) {var symbol await getStockSymbol(name);var stockPrice await getStockPrice(symbol);return stockPrice; } getStockPriceByName(goog).then(function (result){console.log(result); });上面代码是一个获取股票报价的函数函数前面的async关键字表明该函数内部有异步操作。调用该函数时会立即返回一个Promise对象。 下面的例子指定多少毫秒后输出一个值。 function timeout(ms) {return new Promise((resolve) {setTimeout(resolve, ms);}); } async function asyncPrint(value, ms) {await timeout(ms);console.log(value) } asyncPrint(hello world, 50);上面代码指定50毫秒以后输出hello world。 六、注意点 await 命令后面的 Promise 对象运行结果可能是 rejected所以最好把 await 命令放在 try…catch 代码块中。 async function myFunction() {try {await somethingThatReturnsAPromise();} catch (err) {console.log(err);} } // 另一种写法 async function myFunction() {await somethingThatReturnsAPromise().catch(function (err){console.log(err);}); }await 命令只能用在 async 函数之中如果用在普通函数就会报错。 async function dbFuc(db) {let docs [{}, {}, {}];// 报错docs.forEach(function (doc) {await db.post(doc);}); }上面代码会报错因为 await 用在普通函数之中了。但是如果将 forEach 方法的参数改成 async 函数也有问题。 async function dbFuc(db) {let docs [{}, {}, {}];// 可能得到错误结果docs.forEach(async function (doc) {await db.post(doc);}); }上面代码可能不会正常工作原因是这时三个 db.post 操作将是并发执行也就是同时执行而不是继发执行。正确的写法是采用 for 循环。 async function dbFuc(db) {let docs [{}, {}, {}];for (let doc of docs) {await db.post(doc);} }如果确实希望多个请求并发执行可以使用 Promise.all 方法。 async function dbFuc(db) {let docs [{}, {}, {}];let promises docs.map((doc) db.post(doc));let results await Promise.all(promises);console.log(results); } // 或者使用下面的写法 async function dbFuc(db) {let docs [{}, {}, {}];let promises docs.map((doc) db.post(doc));let results [];for (let promise of promises) {results.push(await promise);}console.log(results); }
http://www.pierceye.com/news/815001/

相关文章:

  • 石台做网站策略网页游戏排行榜
  • 注册网站怎么做网站深圳网站设计公司怎么样
  • 网站备案后有什么好处个人主页网页设计
  • 网站搭建上海wordpress主题范例
  • 网站内容建设出现的问题马鞍山人才网
  • 上海正规做网站公司电话演示 又一个wordpress站点
  • 建设银行网站特色完整网站开发视频教程
  • 株洲做网站渠道电话设计师培训生招聘
  • 四川阿坝建设招标网站wordpress调整文章编辑界面
  • 福州seo计费优化设计的答案
  • 网站建设教程网什么是oa系统软件
  • 建设一个网站app需要多少钱哪个做问卷网站佣金高
  • 宁夏网站设计公司网页视频怎么下载ios
  • 滁州建设厅网站工程建设施工企业质量管理规范
  • 从事网站建设的职业wordpress 外网
  • 百度百度上海百度seo
  • 山西网站的公司广东省住房与城乡建设厅网站
  • 怎么查看网站是用什么编程语言开发的品牌软文范文
  • 能够沟通业务的网站wordpress 主题 恢复
  • 动态域名做网站在线查询企业
  • 绍兴企业网站推广建设通是什么网站
  • 网站设计制作太原抖音seo怎么做的
  • 北京网站代理备案上海跨境电商网站开发公司排名
  • 您的网站未备案 或者原备案号被取消开发一个微信小程序多少钱
  • 如何用记事本做网站南宁做网站哪家好
  • 优秀网站首页百度账号怎么改名字
  • 杭州做网站排名软件碧桂园房地产最新消息
  • 上传网站空间天津专门做网站的公司
  • 无锡企业做网站大庆油田内网主页网址
  • 网站开发合同 下载山西正规网站建设报价公司