2017-04-26 41 views
1

我有一個小函數來比較兩個數組。比較後,返回一個數組,其中包含我用作回調的值。如何使功能的最佳方式等待響應ECMA6

但是,我需要等待系統獲取數據並生成數組,在示例中,在進行比較之前,需要等待函數的響應。

我開始ECMA6,我發現了一些可能性,例如AWAIT,YIELD,PROMISES,那麼在處理回調之前讓這個函數等待處理的最好方法是什麼?

function check (callback) { 

    const friends = all_friends_id(callback) 
    const family = all_family_id(callback) 

    let difference = new Set(
    [...friends].filter(x => !family.has(x))) 

    callback(diference) 

    } 
+0

你甚至在這裏做什麼異步?當然'.filter()'不是異步的。甚至不知道你爲什麼使用回調。 – jfriend00

回答

0

如果你是新來EC6/JS,你可能會發現更容易開始使用回調。所以,你的例子將是這個樣子:

function check (callback) { 
    all_friends_id((friends) => { 
     all_family_id((family) => { 
      let difference = new Set(
       [...friends].filter(x => !family.has(x))) 
      callback(difference) 
     }) 
    }) 
} 

你看過之後如何解決回調這個任務,你可能想諾言讀了。 Promise解決了「回調地獄」的問題,其中一個程序有大量的嵌套回調,或複雜的回調關係,或兩者兼而有之。但是對於這個特定的任務,你可能會發現一個簡單的回調範例可以很好地工作。

+0

這工作正常=)我正在觀看YouTube視頻,瞭解如何使用承諾,以我的理解,似乎它正在做同樣的事情......只是以不同的方式。我學到了兩種方法\ o/ 在你看來,使用承諾在什麼情況下更好? –

+0

對不起,謝謝! –

1

你問過「最好」的方法。這是「最好的」,因爲它代碼更簡潔。而且[...friends].filter(x => !family.has(x))的東西似乎無效,所以我糾正了這一點。

const check = async() => { 
    const friends = await all_friends_id(id); 
    const family = await all_family_id(id); 

    return friends.filter(f=> !family.includes(f)) 
} 
+0

這將是很好,有一些序言評論解釋爲什麼這是一個答案 – Soren

+0

@索倫,我會加上它,但「爲什麼這是一個答案」在質疑它是否是答案或不,這顯然是,這樣只是一種侮辱,並且給出這個問題的序言只是熱門話題。它不言自明。 –

+0

你的答案被標記爲由系統刪除「由於低質量」 - 所以我不侮辱你,但試圖就如何讓你的答案更好的建議你。 – Soren