Javascript手动创建承诺拒绝对象

时间:2018-03-23 16:27:38

标签: javascript asynchronous promise

我想知道是否可以手动创建变量/对象来模拟已解决或已拒绝的承诺。

我有以下代码,这是我想要实现的一个工作示例,但它似乎有点像我希望已存在的某种方式。

如果我有以下功能

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");
   });

});
}

但它看起来有点过分,然后我必须为每个需要此逻辑的实例包含此函数。任何帮助将不胜感激

1 个答案:

答案 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();