2016-08-20 15 views
22

Elm में और विशेष रूप से Elm Architecture के साथ दो बार दो आदेश चलाएं, जब विशेष रूप से init फ़ंक्शन शुरू होता है तो कार्य Cmd Msg निष्पादित हो सकता है। हम http अनुरोध भेजने के लिए इसका उपयोग कर सकते हैं या मूल जावास्क्रिप्ट को Elm ports के माध्यम से एक संदेश भेज सकते हैं।एल्म

मेरा सवाल है, मैं init में निष्पादित किए जाने वाले एकाधिक आदेश कैसे भेज सकता हूं?

उदाहरण के लिए मैं कुछ ऐसा कर सकते हैं:

init : (Model, Cmd Msg) 
init = 
    (Model "" [], (Ports.messageToJs "Hello JS")) 

और मैं की तरह कुछ कर सकते हैं:

url : String 
url = 
    "http://some-api-url.com" 
... 

fetchCmd : Cmd Msg 
fetchCmd = 
    Task.perform FetchError FetchSuccess fetchTask 


init : (Model, Cmd Msg) 
init = 
    (Model "" [], fetchCmd) 

मैं कैसे init से एक ही समय में दोनों आदेशों लौट सकते हैं?

मैंने Task.sequence और यहां तक ​​कि Task.parallel देखा है, लेकिन वे कई कार्यों को चलाने के लिए अच्छा प्रतीत होते हैं, विशेष रूप से कमांड नहीं।

उत्तर

41

उपयोग Platform.Cmd.batch (docs): के रूप में सोरेन का कहना है

init : (Model, Cmd Msg) 
init = 
    (Model "" [] 
    , Cmd.batch [fetchCmd, Ports.messageToJs "Hello JS")] 
) 
+3

सही! धन्यवाद – antfx

+0

क्या कमांड समानांतर में चलते हैं या वे क्रमबद्ध हैं? मैं कई HTTP के बैच के बारे में सोच रहा हूं, यदि सीरियलाइज्ड किया जाए तो इसमें काफी समय लगेगा। – goertzenator

+1

@goertzenator वे समानांतर में चलते हैं, श्रृंखला – antfx

3

करते हैं, या नए, बराबर "बैंग" -syntax का उपयोग करें:

init : (Model, Cmd Msg) 
init = 
    (Model "" []) 
    ! [fetchCmd, Ports.messageToJs "Hello JS"] 
संबंधित मुद्दे