按承诺执行异步任务的标准方法
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
});
全部:
我很新手,我想做的是:
[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
});