2016-05-07 3 views
2

JavaScriptやES5のような約束を使う方法を探しています。私はのような何かをしたいと思いますDにPromisesやTasksのようなものがありますか?

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); 
    }); 
}); 

んDはそのような何かを行うにはどのような方法がありますか?

+0

小文字: 'v => {}' [期待通りのことをしない](https://forum.dlang.org/post/[email protected])。 – sigod

+1

答えはありませんが、DはFibersをサポートしていますが、IMOは約束よりもはるかに優れています。例えば、vibe.dを見てください。 –

+0

私はそのことを確認していましたが、Fibersが約束をどのように置き換えることができるかについて、正しい洞察はまだありません。あなたは私に例を挙げることができますか? –

答えて

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(); 

しかしasyncの使用実際にvibe.dのすべてのI/O機能として、ここでは必要とされていないすでにコールバックを必要とせずに100%非同期です。

関連する問題