Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 你是否应该在承诺中做出决定或拒绝后返还一些东西?_Javascript_Promise_Ecmascript 6_Es6 Promise - Fatal编程技术网

Javascript 你是否应该在承诺中做出决定或拒绝后返还一些东西?

Javascript 你是否应该在承诺中做出决定或拒绝后返还一些东西?,javascript,promise,ecmascript-6,es6-promise,Javascript,Promise,Ecmascript 6,Es6 Promise,假设我有如下承诺: new Promise((resolve, reject) => { // Some random conditional if (today === 'Friday') { console.log("I'm resolving this thing here"); resolve('taco'); // Should I have a return true or false here? } console.log("Cod

假设我有如下承诺:

new Promise((resolve, reject) => {

  // Some random conditional
  if (today === 'Friday') {
    console.log("I'm resolving this thing here");
    resolve('taco');
    // Should I have a return true or false here?
  }

  console.log("Code made it past the first resolve");

  // Do some other code here, like connect to a database or API or something.
  connectToDatabase(function(result){
    // result was 'hamburger'
    resolve(result);
  });

}).then((value) => {
  console.log(value);
});
在本例中,我得到以下输出:

I'm resolving this thing here
Code made it past the first resolve
taco
因此,在我执行
解析
之后,承诺代码将继续执行。在上面的示例中,我不必要地连接到某个数据库、端点或其他东西。显然,send
resolve
被忽略,这很好。但是从服务成本的角度来看,连接到数据库和API是非常昂贵的,尤其是当您每次提出请求(如AWS服务或其他)时,都要花费金钱

所以我的问题是,我是否应该输入一个
返回true或在第一个
解析
之后的内容

拒绝
类似,我应该在
拒绝
之后输入
return false
还是(true

new Promise((resolve, reject) => {
  someAsyncFunction((err, result) => {
    if (err) {
      reject(err);
      // Should I have a return true or false here or something?
    }

    // Do something here, like connect to a database or fetch a value from some API endpoint or something.

    resolve(result);
  });
});
如果我不想在那之后执行代码
拒绝
我应该返回,对吗

当我翻阅各种ES6文档时,我找不到任何地方可以清楚地说明这一点。。。很多承诺的例子通常都是简化的


如果我归还了这些东西,我应该归还什么<代码>真值
<代码>错误
?或
返回解析('taco')

基本了解承诺的工作原理以及何时使用解决、拒绝

   function d() {
     console.log("D started");
     return Promise.reject(new Error("Aborted from D function"));

   //return Promise.resolve("Done with D");
 }

function c() {
console.log("C Started");
//return Promise.reject(new Error("Aborted from C function"));
//return Promise.resolve("Done with C");
return d().then(result => {
       return Promise.resolve(result);  
}).catch(err => {
       return Promise.reject(new Error(err));
});
}

function b() {
  console.log("B Started");
  //return Promise.reject(new Error("Aborted from B function"));
 return Promise.resolve("Done With B");
   }

    function a() {
    console.log("A started");
    return b().then(function(resultb){
        console.log("B result:"+resultb);
        return c();
 }).catch(function(err){
        console.log("Error:"+err)
}).then(function(resultc){
       console.log("C result:"+resultc)
}).catch(function(err){
    console.log("Error:"+err);  
  });
   }

  a();

基本了解承诺的工作方式以及何时使用解决、拒绝

   function d() {
     console.log("D started");
     return Promise.reject(new Error("Aborted from D function"));

   //return Promise.resolve("Done with D");
 }

function c() {
console.log("C Started");
//return Promise.reject(new Error("Aborted from C function"));
//return Promise.resolve("Done with C");
return d().then(result => {
       return Promise.resolve(result);  
}).catch(err => {
       return Promise.reject(new Error(err));
});
}

function b() {
  console.log("B Started");
  //return Promise.reject(new Error("Aborted from B function"));
 return Promise.resolve("Done With B");
   }

    function a() {
    console.log("A started");
    return b().then(function(resultb){
        console.log("B result:"+resultb);
        return c();
 }).catch(function(err){
        console.log("Error:"+err)
}).then(function(resultc){
       console.log("C result:"+resultc)
}).catch(function(err){
    console.log("Error:"+err);  
  });
   }

  a();

如果您需要执行另一个承诺,请将其处理为.resolve或.catch作为reject。
我是否应该将返回值设置为true;或者在第一次解析之后的某个代码?
不一定-解析(或拒绝)之后继续使用其他代码可能是完全有效的-只要您知道任何进一步的解析/拒绝被忽略,就没有理由在该点“返回”返回承诺。拒绝(新错误(err));很高兴回来reject@UmakantMane. 您必须使用
拒绝
来结算
承诺
。你的建议实际上会让
承诺
悬而未决,可能会维护整个承诺链。关于你第二段中的“在这里做点什么”,你不应该这样做。只需
解决(结果)
,不做其他任何事情。您正在承诺
someAsyncFunction
,之后发生的所有事情都应该进入
然后
回调。如果您需要“连接到数据库或从某个API端点或其他地方获取值”,请为此创建一个额外的承诺。如果您需要执行另一个承诺,请在中处理它。然后,对于resolve或.catch,则为reject。
我是否应该输入一个返回true;或者在第一次解析之后的某个代码?
不一定-解析(或拒绝)之后继续使用其他代码可能是完全有效的-只要您知道任何进一步的解析/拒绝被忽略,就没有理由在该点“返回”返回承诺。拒绝(新错误(err));很高兴回来reject@UmakantMane. 您必须使用
拒绝
来结算
承诺
。你的建议实际上会让
承诺
悬而未决,可能会维护整个承诺链。关于你第二段中的“在这里做点什么”,你不应该这样做。只需
解决(结果)
,不做其他任何事情。您正在承诺
someAsyncFunction
,之后发生的所有事情都应该进入
然后
回调。如果您需要“连接到数据库或从某个API端点或其他地方获取值”,请为此创建一个额外的承诺。