【问题标题】:Google Cloud Functions - warning Avoid nesting promises promise/no-nestingGoogle Cloud Functions - 警告避免嵌套承诺承诺/不嵌套
【发布时间】:2019-05-22 00:47:02
【问题描述】:

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

警告避免嵌套承诺 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();
      });
    });
  });
}

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-functions


    【解决方案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
    猜你喜欢
    • 2019-03-04
    • 2020-04-22
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多