【问题标题】:Should you return something after resolving or rejecting in a Promise? [duplicate]在 Promise 中解决或拒绝后,你应该返回一些东西吗? [复制]
【发布时间】:2017-03-02 01:10:40
【问题描述】:

假设我有如下承诺:

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

所以,在我执行resolve 之后,Promise 代码继续执行。在上面的示例中,我不必要地连接到某个数据库或端点或其他东西。显然发送resolve 被忽略了,这很好。但从服务成本的角度来看,连接到数据库和 API 的成本很高,尤其是当您每次发出 AWS 服务之类的请求时都要花钱。

所以我的问题是,我应该先输入return true; 还是先输入resolve

reject 类似,我应该在reject 之后输入return false 还是(真的??)?

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

如果我不想在那之后执行代码 reject 我应该返回,对吗?

当我翻阅各种 ES6 文档时,我找不到任何地方清楚地说明了这一点……许多 Promise 示例通常都非常简化。

如果我确实退回了这些东西,我应该退回什么? true? false?还是return resolve('taco');

【问题讨论】:

  • 如果您需要做另一个承诺,请在 .then 中处理它以解决或 .catch 以拒绝。
  • Should I be putting in a return true; or something in after that first resolve? 不一定 - 在您解决(或拒绝)之后继续使用其他代码可能是完全有效的 - 只要您了解任何进一步的解决/拒绝都被忽略,没有理由在那个时候“返回”
  • return Promise.reject(new Error(err));退货很好
  • @UmakantMane。您必须只需使用reject 来解决Promise。您的建议实际上会让Promise 不安,可能会维护整个承诺链。
  • 关于第二个 sn-p 中的“在这里做点什么” - 你不应该那样做。只需resolve(result),不要做任何其他事情。你承诺someAsyncFunction,之后发生的一切都应该在then回调中进行。如果您需要“连接到数据库或从某个 API 端点或其他东西获取值”,请为此创建一个额外的承诺。

标签: javascript promise ecmascript-6 es6-promise


【解决方案1】:

基本了解 Promise 的工作原理以及何时使用 resolve、reject

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 2017-07-29
    • 2015-06-02
    • 1970-01-01
    • 2023-03-17
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多