Day learn,day up

前言

忽略我這個中文式英語的標題。javascript

身爲一個記性不咋地的前端渣渣,以爲平時看的一些文章太散了,特開此文做爲一種記錄,可謂好記性不如爛筆頭,也算是逼本身要常常學習。文章的日期爲最後更新時間,題目順序不分前後,但願能常常保持置頂狀態,目錄到達必定長度時會重開一篇。前端

工具

hexo遷移

由於個人筆記本電腦最近瓦特了,因此不得不把博客遷出來,在這裏作個記錄,方便下次查找。 java

  • 將原來的電腦上原有的hexo目錄拷貝到新電腦,只需拷貝如下目錄:git

    • _config.yml
    • package.json
    • scaffolds/
    • source/
    • themes/
  • 在新電腦安裝hexoes6

    npm install -g hexogithub

  • 安裝後進入hexo/目錄npm

  • 安裝模塊編程

    1
    2
    3
    4
    npm install
    npm install hexo-deployer-git --save
    npm install hexo-generator-feed --save
    npm install hexo-generator-sitemap --save
  • 而後從新配置githubjson

    1
    2
    git config --global user.name "YOUR NAME"
    git config --global user.email "YOUR EMAIL ADDRESS"

    Authenticating with GitHub from Gitpromise

    • 在 Git Bash 下執行以下命令,生成 SSH key

      ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

      email爲本身的github帳號,剩下的一路回車便可。

    • 將 SSH key 添加到 ssh-agent

      • 在 Git Bash 下執行以下命令,開啓 ssh-agent

      eval "$(ssh-agent -s)"

      • 將這個 SSH key 添加到 ssh-agent 裏去

      ssh-add ~/.ssh/id_rsa

    • 將 SSH key 添加到 Github 帳戶

      • 在 Git Bash 中將 SSH Key 拷貝出來:

      clip < ~/.ssh/id_rsa.pub

      此時,SSH Key 已經在咱們的剪切板裏了。而後登陸 Github 賬號,依次點擊本身的頭像,SettingsSSH and GPG keysAdd SSH key, 在 Title 這裏輸入 Key 的label,好比 your_name - PC,而後在 Key 裏面把 SSH Key 粘貼進去,點擊 Add SSH key 大功告成。

    • 測試 SSH 鏈接,在 Git Bash 中敲入

    ssh -T git@github.com

  • 作完上面這些後 執行hexo deploy 大功告成

  • 可是我仍是報錯,hexo error fatal httprequestexception encountered….

    後來在https://github.com/hexojs/hexo/issues/3043 這裏找到解決方法

    把repo的配置方式改一下,任何就能夠了。

    1
    2
    3
    4
    deploy:
    type: git
    repo: git@github.com:anchen1204/anchen1204.github.io.git
    branch: master

    以上方法結合了這兩篇文章:

    hexo:更換電腦,如何繼續寫博客

    多機更新 Hexo 博客

JavaScript

Object.assign()

語法:Object.assign(target, ...sources );

參數:

target:必需。可枚舉屬性複製到的對象。

…sources:必需。從其中複製可枚舉屬性的對象。

實例:

1
2
3
4
5
var first = { name: "Bob" };
var last = { lastName: "Smith" };

var person = Object.assign(first, last);
console.log(person);

看阮一峯大神的ES6-編程風格 :

對象儘可能靜態化,一旦定義,就不得隨意添加新的屬性。若是添加屬性不可避免,要使用Object.assign方法。

1
2
3
4
5
6
7
8
9
10
11
// bad
const a = {};
a.x = 3;

// if reshape unavoidable
const a = {};
Object.assign(a, { x: 3 });

// good
const a = { x: null };
a.x = 3;

Promise

閱讀(按左到右順序): 大專欄  Day learn,day up/zh-CN/docs/Web/JavaScript/Guide/Using_promises" target="_blank" rel="noopener noreferrer">使用 Promises Promise

這兩天又看了一遍Promise的內容,以爲這個對象真的很是好用。

作個總結唄,其實在項目中已經快樂地用起來了,很方便。

它存在的意義?還不是由於javaScript是世界上最好的…不對,說錯臺詞了,應該是javaScript是單線程語言。

咱們常常爲了解決這個問題,使用的是回調函數,俗稱callback,爲了達到異步執行。好比setTimeout ,好比AJAX異步操做。

具體介紹不表,能夠看文檔。直接說使用吧。

1
new Promise( function(resolve, reject) {...} /* executor */  );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
new Promise((resolve, reject) => {
console.log('Initial');

resolve();
})
.then(() => {
throw new Error('Something failed');

console.log('Do this');
})
.catch(() => {
console.log('Do that');
})
.then(() => {
console.log('Do this whatever happened before');
});

.then()是鏈式調用,獲取上一個Promise resolve返回的對象進行操做;

.catch() 原理同then,可是是針對Promise 的reject返回的對象進行操做;

注意:在一個失敗操做(即一個 catch)以後能夠繼續使用鏈式操做,即便鏈式中的一個動做失敗以後還能有助於新的動做繼續完成。

即鏈式調用不會由於其中一個環節失敗(reject)而中斷。

好用組合:

Promise.resolve() &Promise.reject()

這兩個是手動建立一個已經resolve或者reject的promise快捷方法。

Promise.race()Promise.all()

這兩個用法同樣,其實括號內都是多個Promise對象

可是不一樣的地方在於:

Promise.all(iterable) 方法返回一個 Promise 實例,此實例在 iterable參數內全部的 promise 都完成(resolved),或參數中不包含 promise 時回調完成(resolve);若是參數中 promise 有一個失敗(rejected),此實例回調失敗(reject),失敗緣由的是第一個失敗 promise 的結果。

Promise.race(iterable)方法返回一個 promise,一旦迭代器中的某個promise解決或拒絕,返回的 promise就會解決或拒絕。

一句話,前者若是有一個失敗,則之間返回第一個失敗(catch裏);後者只會返回第一個處理的失敗或者成功。

舉個實際可能會使用的例子:

Promise.all是很適合來解決多個Promise是用於獲取請求基本信息,好比app裏的登錄信息,ticket,版本號,它們都獲取成功後能夠接着執行可能下一步的請求。。。

Promise.race很適合容錯現象,好比接口超時:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//網絡超時寫法:Promise.race()
let promise1 = new Promise(resolve=>{
setTimeout(()=>{
return '數據已返回';
},5000)
})
let promise2= new Promise(reject=>{
setTimeout(()=>{
reject('網絡超時')
},4000)
})
Promise.race([promise1,promise2]).then(res=>{
console.log(res)
}).catch(res=>{
console.log(res)
})
相關文章
相關標籤/搜索