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 ??
如何从 Cloud Functions 连接 Google Cloud SQL?