我想知道是否可以手动创建一个变量/对象来模拟已解决或拒绝的承诺。
我有以下代码,它是我试图实现的目标的一个工作示例,但它似乎只是我希望已经存在的东西的一点循环方式。
如果我有以下功能
function fakeMulti() {
return new Promise(function(res, rej) {
promises = [];
// inst 01
var flag = true;
// this will pass and append resolved promise
if(flag) {
promises.push(*resolved*);
} else {
promises.push(*rejected*);
}
// inst 02
var flag = false;
// this will fail and append rejected promise
if(flag) {
promises.push(*resolved*);
} else {
promises.push(*rejected*);
}
// resolve
Promise.all(promises).then(function(result) {
res("FAKE MULTI PASS");
}).catch(function(error) {
rej("FAKE MULTI FAIL");
});
});
}
不过,我能够创建承诺解决和拒绝的唯一方法是使用一个只返回承诺的函数
function forcePromise(type) {
return new Promise(function(res, rej) {
if(type == "resolve") {
res("RESOLVE");
} else {
rej("REJECT");
}
});
}
我可以使用它,它工作得很好
function fakeMulti() {
return new Promise(function(res, rej) {
promises = [];
// inst 01
var flag = true;
// this will pass and append resolved promise
if(flag) {
promises.push(forcePromise("resolve"));
} else {
promises.push(forcePromise("reject"));
}
// inst 02
var flag = false;
// this will fail and append rejected promise
if(flag) {
promises.push(forcePromise("resolve"));
} else {
promises.push(forcePromise("reject"));
}
// resolve
Promise.all(promises).then(function(result) {
res("FAKE MULTI PASS");
}).catch(function(error) {
rej("FAKE MULTI FAIL");
});
});
}
但这似乎有点过分,然后我必须为每个需要此逻辑的实例包含此函数。任何帮助将不胜感激
Promise.resolve和Promise.reject 应该可以工作,..
这是一个简单的片段,做你看起来想做的事情。
function testMulti() {
const m = [];
m.push(Promise.resolve("this is ok"));
m.push(Promise.reject("this should fail"));
Promise.all(m).then(function (r) {
console.log("success with: " + r);
}).catch(function (e) {
console.log("Fail with: " + e);
});
}
testMulti();