Google Cloud Functions - 警告避免嵌套承诺承诺/不嵌套

Posted

技术标签:

【中文标题】Google Cloud Functions - 警告避免嵌套承诺承诺/不嵌套【英文标题】:Google Cloud Functions - warning Avoid nesting promises promise/no-nesting 【发布时间】:2018-09-25 10:59:23 【问题描述】:

鉴于以下功能,我收到警告:

警告避免嵌套承诺 promise/no-nesting(第 6 行)

我应该如何重构函数来修复警告?

function FindNearbyJobs(uid, lat, lng)
  return admin.database().ref(`users/$uid/nearbyjobs`).remove().then(data => 
    return new Promise((resolve, reject) => 
      const geoQueryJobs = geoFireJobs.query(center: [lat, lng], radius: 3 );
      geoQueryJobs.on("key_entered", (key, location, distance) => 
        return Promise.all([admin.database().ref(`jobs/$key/category`).once('value'), admin.database().ref(`users/$uid/account/c`).once('value')]).then(r => 
          const cP = r[0];
          const cO = r[1];
          if (cO.val().includes(cP.val()))
            return admin.database().ref(`users/$uid/nearbyjobs/$key`).set( d: distance );
          else
            return null;
          
        );
      );
      geoQueryJobs.on("ready", () => 
        resolve();
      );
    );
  );

【问题讨论】:

【参考方案1】:

你有一个 promise then() 调用嵌套在另一个 promise 的 then() 中。这被认为是糟糕的风格,并使您的代码难以阅读。如果您有一系列工作要执行,最好将您的工作一个接一个 链接起来,而不是将一个内部 嵌套在一起。所以,不要像这样嵌套:

doSomeWork()
.then(results1 => 
    return doMoreWork()
    .then(results2 => 
        return doFinalWork()
    )
)

像这样对工作进行排序:

doSomeWork()
.then(results => 
    return doMoreWork()
)
.then(results => 
    return doFinalWork()
)

搜索该错误消息也会产生this helpful discussion。

【讨论】:

我已经尝试了上述解决方案,但它对我不起作用或我做错了 这对我有用,我只是在doSomeWork 之前添加了一个return,并在最后一个参数的底部添加了一个catch

以上是关于Google Cloud Functions - 警告避免嵌套承诺承诺/不嵌套的主要内容,如果未能解决你的问题,请参考以下文章