按承诺执行异步任务的标准方法

Standard way to do asyntask in order with promise

全部:

我很新手,我想做的是:

[1]下载文件A,当A下载完成后,再下载文件B,待B准备好后,再下载加载C。

[2]写一个下载文件A的函数,不管调用多少次,只下载一次。

[1]和[2]不是相关任务。你可以帮我解决其中之一或两者。

任何人都可以给我一个简单的例子吗?谢谢。

使用 node.js 中的 Bluebird promise 库,这里有三种方法:

// load and promisify modules
var Promise = require("bluebird");
var fs = Promise.promisifyAll(require('fs'));

纯顺序,每个步骤单独编码

// purely sequential
fs.readFileAsync("file1").then(function(file1) {
    // file1 contents here
    return fs.readFileAsync("file2");
}).then(function(file2) {
    // file2 contents here
    return fs.readFileAsync("file3");    
}).then(function(file3) {
    // file3 contents here
}).catch(function(err) {
    // error here
});

并行读取所有内容,完成后收集结果

// read all at once, collect results at end
Promise.map(["file1", "file2", "file3"], function(filename) {
    return fs.readFileAsync(filename);
}).then(function(files) {
    // access the files array here with all the file contents in it
    // files[0], files[1], files[2]
}).catch(function(err) {
    // error here
});

从数组中按顺序读取

// sequential from an array
Promise.map(["file1", "file2", "file3"], function(filename) {
    return fs.readFileAsync(filename);
}, {concurrency: 1}).then(function(files) {
    // access the files array here with all the file contents in it
    // files[0], files[1], files[2]
}).catch(function(err) {
    // error here
});