2016-05-07 9 views
2

Ich bin auf der Suche nach einer Möglichkeit, Versprechen zu verwenden, wie sie in JavaScript oder ES5 verwendet werden.Gibt es etwas wie Versprechen oder Aufgaben in D?

würde Ich mag, wie etwas zu tun ist:

auto p = new Promise!string(); 
webRequest.get("server.com/file.json").then((v) { 
    auto json = ParseData(v); 
    auto fileContent = fileIO.readFile(json.filename).then((v2) { 
     p.resolve(v2); 
    }); 
}); 

Does D haben keine Möglichkeit, so etwas zu tun?

+0

Kleine Anmerkung: 'v => {}' [tut nicht das, was Sie erwarten] (https://forum.dlang.org/post/[email protected]). – sigod

+1

Keine Antwort, aber D hat Unterstützung für Fibers, die IMO viel besser sind als Versprechen. Sehen Sie sich vibe.d als Beispiel an. –

+0

Ich habe das überprüft, aber ich habe immer noch nicht den richtigen Einblick, wie Fibers die Versprechen ersetzen kann. Kannst du mir ein Beispiel geben? –

Antwort

2

http://vibed.org/api/vibe.core.concurrency/Future

import vibe.core.concurrency : async; 
import vibe.inet.urltransfer : download; 
import vibe.data.json : parseJsonString; 
import vibe.core.file : readFileUTF8; 

auto p = async({ 
    auto content = download("server.com", "file.json"); 
    auto json = parseJsonString(content); 
    auto file_content = readFileUTF8(json["filename"]); 
}); 

auto content = p.getResult(); 

Aber Nutzung von async ist eigentlich nicht hier, da alle I/O-Funktionen von vibe.d erforderlich sind bereits zu 100% asynchron, ohne dass für Rückrufe.