nodejs 因为要异步所以总是把方法传来传去. 比如这段代码
model.Company.findOne({"name": "KFC"}).then(function (c) {
console.log("success get company", c);
let j = new model.Job(
{
title: "title",
position: "position",
category: "A",
description: "description",
location: "location",
workType: "B",
salary: "100",
}
);
j.save().then(function (j) {
console.log("success save job", j);
c.addToJob(j).save().then(function (c) {
console.log("success add to job")
}, err => console.error("save job after company", err));
}, err => console.error("save job", err))
}, function (err) {
if (err) console.error.bind(console, "find company error");
});
如果是正常的语言就会很简单
c,err = find()
if err {}
err = c.add()
if err {}
job = ...
job.save()
c.add(job)
哪怕加上 groutine 异步化也可以很好看
有没有大佬能教教怎么改这段代码?
1
Sparetire 2019-05-17 18:54:12 +08:00 via Android 1
async/await
|
2
Cryse 2019-05-17 18:56:36 +08:00
async await
另外这单个字母的变量看着就蛋疼 |
4
mcfog 2019-05-17 19:29:11 +08:00 1
1. go 的 if err 一般而言很难算在“正常的语言”范畴中
2. 你的逻辑没理清楚,go 的也好什么别的语言也好写出来的一样也是面条代码 (确实 nodejs 的面条比别家更恶臭一点) 3. Promise.all( [findCompany({name:'KFC'}, createJob(input)] ) .then( ([company, job]) => attachJobToCompany(company, job) ) .catch( handleErr ) |
5
fortunezhang 2019-05-17 23:20:53 +08:00 1
兄弟,你没有拆分好逻辑。
另外你可以用 await async,最近我把项目里面能用的都用了,感觉还不错。 |
6
Magentaize 2019-05-18 06:44:26 +08:00 via iPhone
代码之光 await
|
7
xiadong1994 2019-05-18 09:40:48 +08:00 via iPhone 1
then 里面可以 return 一个 promise 然后在外面一层继续 then/catch。promise 里面的错误可以 throw 然后在外面 catch 然后继续 then ……
|