我想知道是否可以手动创建变量/对象来模拟已解决或已拒绝的承诺。
我有以下代码,这是我想要实现的一个工作示例,但它似乎有点像我希望已存在的某种方式。
如果我有以下功能
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");
});
});
}
我能够创建Promise Resolve和Reject的唯一方法就是使用一个只返回Promise的函数
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");
});
});
}
但它看起来有点过分,然后我必须为每个需要此逻辑的实例包含此函数。任何帮助将不胜感激
答案 0 :(得分:1)
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();