1. 程式人生 > >es6 Generator Thunk函式實現自動執行

es6 Generator Thunk函式實現自動執行

function *gen(){
    var res = yield 1+2;
    yield 2+3;
    yield 3+4;
}
var genFun = gen();

執行流程:
1、var result = genFun.next(); 只是將 yield後面的程式碼執行一下,返回到result中,這個時候還沒有res什麼事情呢。
2、再次呼叫genFun.next(param);然後才會將param賦值給res;並接著往下執行到2+3 這個表示式,然後又把這個結果傳遞出來。
*

generator函式中沒有非同步的自動執行函式

function run(genFun){
    this.next = function(data){
    var result = genFun.next();
    console.log("yield後面的表示式值是:",result.value);
    if(value.done) return;//如果執行完畢了,就return;
    next();//否則就再次呼叫next來取下一個value;
}
    next();
}
var gen = genFun();
run(gen);

執行結果:
這裡寫圖片描述

generator函式中包括非同步操作的自動執行函式
function *genFun(){
    let result = yield function(fun){
        setTimeout(fun({result:"data"}),1000);
    }
    console.log("非同步操作的結果是:",result);
}
function run(genFun){
    this.next = function(data){
        let result = genFun.next(data);
        console.log("result value is ",result.value);//這裡可以發現其實value是一個function,所以下面可以直接呼叫value();
        if(result.done) return;
        result.value(this.next);
    };
    next();
}
var gen = genFun();
run(gen);

這裡寫圖片描述

結論

如果一個函式中包含非同步操作,因為不確定什麼時候會拿到值,所以就直接傳遞一個函式接收結果,並在適當的時候呼叫這個函式,然後並對結果進行處理就可以了。

相關推薦

es6 Generator Thunk函式實現自動執行

function *gen(){ var res = yield 1+2; yield 2+3; yield 3+4; } var genFun = gen(); 執行流程: 1、var result = genFu

強悍!winrar妙用-將bat指令碼打包成exe可執行檔案並實現自動執行

轉自:https://blog.csdn.net/qq_35440678/article/details/53264410   一、背景介紹 最近有個這樣的需求,為了網頁解決IE相容問題,需實現自動檢測到使用IE開啟時下載一個離線chrome安裝包,用一個bat指令碼啟動離線的

探究SpringBoot啟動時實現自動執行程式碼

前言 目前開發的SpringBoot專案在啟動的時候需要預載入一些資源。而如何實現啟動過程中執行程式碼,或啟動成功後執行,是有很多種方式可以選擇,我們可以在static程式碼塊中實現,也可以在構造方法裡實現,也可以使用@PostConstruct註解實現,當然

asp.net 呼叫函式自動執行了一些事件

問題描述:定義了一個自定義的自動用頁使用者控制元件, 裡面提供了一個改變類別的函式.在控制元件中使用了pageload事件下面使用了二種呼叫方法:1. 在其它控制元件事件中執行control.changelb(lb)          執行的順序應該是 先執行了pageloa

ES6 系列之 Generator自動執行

單個非同步任務 var fetch = require('node-fetch'); function* gen(){ var url = 'https://api.github.com/users/github'; var result = yield fetch(url); c

expect實現自動scp和ssh登錄後執行命令,並向bash提供返回值

ip地址 用戶名 expect 密碼 #!/bin/bash # 全局變量:用戶名,普通用戶密碼,root密碼 loginname="xxxx" userpwd="xxxx" rootpwd="xxxx" # 讀取iplist(逐行存儲IP地址) cat /root/iplist | whi

Pycharm WebStorm 配置 babel 實現自動編譯 ECMAScript6 (es6) 文件

pycharm webstorm 配置 所需基礎node.jsnmp開始1、首先新建一個空項目,減少幹擾更快的看到配置效果。2、在項目中創建一個 man.js 文件 。進入設置:「 File Settings Languages&Frameworks JavaScript 」將 Ja

7、實現指令碼執行失敗 時自動截圖並儲存出錯資訊到檔案中

自動化指令碼如果失敗了,憑藉什麼去快速定位呢?當然是截圖和出錯資訊了,這裡就來實現這兩個功能。 方法是重寫TestListenerAdapter中的onTestFailure和onTestSkipped方法,在方法中新增截圖和儲存出錯資訊到文字的方法。 新建一個webtestListener.j

idea實現自動sql-generator的使用

text value 文件 sources ring tar lec word space 1.實現步驟: 9.1 加載插件 <build> <plugins> <plugin>

利用svn鉤子hooks/post-commit,實現程式碼更新,自動執行指令碼

1. 在svn伺服器對應的專案中會存在以下幾個目錄和檔案 conf  db  format  hooks  locks  README.txt 其中目錄hooks是放置程式碼提交執行的檔案 進入 hooks目錄新建一個 post-comm

windows實現自動部署jar包執行程式

windows執行jar包還是比較簡單的,這邊部落格只是把啟動的命令打包成一個windows可執行的bat檔案下面就說一下吧 首先在windwos放置jar包的位置,新建start.bat檔案 檔案內容如下 @echo off java -jar doctor

ES6 Generator函式之基本用法(2)

Generator函式之基本用法(2) 上一篇文章中總結了Generator函式基本概念: yield表示式,與Iterator介面、for…of迴圈的關係,next方法,throw方法,return方法等內容。 這篇文章接著上一篇文章繼續總結Generator函式的基本用法 (1)

ES6 Generator函式之基本用法(1)

Generator函式之基本用法 (1)基本概念 Generator函式是ES6 提供的一種非同步程式設計解決方案,語法與傳統函式完全不同。 Generator函式與普通函式在寫法上的不同 1.function命令與函式名之間有一個星號(*)。 2.函式體內部使用yield語

定時執行Python指令碼實現自動簽到

起初學Python最想做的就是實現自動簽到了,而且是全自動的,電腦關機也能執行簽到的那種,後來程式碼實現了但是偏偏驅動器出問題了,也就是程式執行第一步 不能開啟瀏覽器,後來我的pycharm的環境也出各種問題,我亂增改路徑導致我的python的pip指令都執行不了了,或許是以

使用springboot2多執行緒,執行緒類無法實現自動注入需要的bean

1、情況描述 使用springboot2多執行緒,執行緒類無法實現自動注入需要的bean,解決思路,通過工具類獲取需要的bean 如下 package com.ps.uzkefu.apps.ctilink.handler; import com.baomidou.mybati

理解 ES6 Generator 函式

Generator函式跟普通函式的寫法有非常大的區別: 一是,function關鍵字與函式名之間有一個星號; 二是,函式體內部使用yield語句,定義不同的內部狀態(yield在英語裡的意思就是“產出”)。 最簡單的Generator函式如下: function* g() {

實現每隔一段時間,自動執行某個功能,比如自動提交資料到伺服器等

效果: 程式碼如下一個activity package com.mytest; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; im

每隔一秒自動執行函式(JavaScript)

1. setInterval() ——每隔一秒自動執行方法,setInterval方法或字串 ,毫秒,引數陣列(方法的))var c=0;function showLogin(){alert(c++);}setInterval("showLogin()","1000");2.

新手看完Python實現微信跳一跳自動執行,再忍不住了

我相信現在很多人都在玩微信的跳一跳小遊戲,前面幾天,很多人在朋友圈晒「跳一跳」人工智慧開掛教程:如何讓電腦自己玩微信跳一跳。 很多朋友表示不太懂這是什麼。 首先,這不是一個「破解外掛」安裝教程,而是一個「破解軟體」製作教程,要靠自己用程式碼一點點寫出來,你需要有一定的程式設計基礎,這裡用的是

python 實現執行緒併發執行 【join函式

主執行緒啟動一個子執行緒t並等到t執行緒結束後才執行: import threading import time def reading(): for i in range(5): print("reading", i) time.