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 - 警告避免嵌套承诺承诺/不嵌套的主要内容,如果未能解决你的问题,请参考以下文章

? Google Cloud Functions ?????? MongoDB Atlas ??

Google Cloud Functions 部署问题

如何从 Cloud Functions 连接 Google Cloud SQL?

Google Cloud Functions 通知 iOS

Google Cloud Functions Cron 作业不工作

在本地测试 Python Google Cloud Functions