例子:
function multiRejectExample(){
return new Promise(function (resolve, reject){
if(statement){
console.log('statement 1');
reject(throw new Error('error'));
}
if(statement){
console.log('statement 2');
reject(throw new Error('error'));
}
});
}
Run Code Online (Sandbox Code Playgroud)
我用的是蓝鸟 上面的做法可以吗?这是不好的做法吗?
另外,如果它在第一个语句中拒绝,为什么“语句 2”仍然打印出来?如果“被拒绝”我想退货,该怎么办?
使用 Promise.try 然后抛出错误是不是更好?帮助!谢谢你!
此处记录 API http://bluebirdjs.com/docs/api/cancellation.html
我在我的演示中尝试过,但不起作用
var Promise = require('bluebird');
var a = require('./a');
var b = require('./b');
var cancelPromise = Promise.resolve();
cancelPromise.cancel();
cancelPromise = a.fnA()
.then(function() {
return b.fnB();
})
.then(function() {
console.log('done');
})
.finally(function() {
if (cancelPromise.isCancelled()) {
console.log('canceled');
}
console.log('end');
});
Run Code Online (Sandbox Code Playgroud)
那么如何使用这个方法呢?
我正在尝试了解 Promise 以及如何在异步循环上使用它们。
我收集了以下代码来读取三个文件的内容(使用forEach
),并且当所有承诺解析时记录所有文件的输出:
var Promise = require('bluebird');
var fs = require('fs');
var path = require('path');
var files = ['1.json','2.json','3.json'];
var promises = []
files.forEach(function(file){
fs.readFile(path.join('./',file), 'utf8', function(err,data){
promises.push(new Promise(function(resolve, reject){
resolve(data)
})
);
})
});
Promise.all(promises).then(function(values){
console.log(values)
});
Run Code Online (Sandbox Code Playgroud)
我不知道如何将循环放入.all()
我尝试了这段代码,但这记录了一个空数组。
我究竟做错了什么?
我检查了蓝鸟网站无法找到答案.然后,我检查了GitHub问题,发现了一个带有浏览器支持的破旧链接.
bluebird支持哪些浏览器和浏览器版本?