D中有Promise或Tasks这样的东西吗?

时间:2016-05-07 14:22:18

标签: promise d

我正在寻找一种使用promises的方法,比如JavaScript或ES5中的方法。

我想做点什么:

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有没有办法做这样的事情?

1 个答案:

答案 0 :(得分: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%异步,而不需要回调。