首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

有没有高手能师范一下 nodejs 怎么写代码?

  •  
  •   petelin · 209 天前 · 1089 次点击
    这是一个创建于 209 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 异步化也可以很好看

    有没有大佬能教教怎么改这段代码?

    7 回复  |  直到 2019-05-18 09:40:48 +08:00
        1
    Sparetire   209 天前 via Android   ♥ 1
    async/await
        2
    Cryse   209 天前
    async await
    另外这单个字母的变量看着就蛋疼
        3
    petelin   209 天前
    看到了曙光
    @Sparetire
    @Cryse

    另外好像 then 可以链式调用不需要 每一层都写里面....
        4
    mcfog   209 天前   ♥ 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   208 天前   ♥ 1
    兄弟,你没有拆分好逻辑。
    另外你可以用 await async,最近我把项目里面能用的都用了,感觉还不错。
        6
    Magentaize   208 天前 via iPhone
    代码之光 await
        7
    xiadong1994   208 天前 via iPhone   ♥ 1
    then 里面可以 return 一个 promise 然后在外面一层继续 then/catch。promise 里面的错误可以 throw 然后在外面 catch 然后继续 then ……
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2836 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 12:00 · PVG 20:00 · LAX 04:00 · JFK 07:00
    ♥ Do have faith in what you're doing.