推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
bru

一个涉及 Javascript 回调函数的问题,请大牛帮忙看看

  •  
  •   bru · Oct 16, 2015 · 3409 views
    This topic created in 4045 days ago, the information mentioned may be changed or developed.
    app.reg(regInfo, function(err) {
        if (err) {
            toast(err);
            return;
        }
        toast('注册成功');
        // 注册成功,继续处理业务
    });
    
    app.reg = function(regInfo, callback) {
        if (regInfo.account.length < 5) {
            return callback('用户名最短需要 5 个字符');
        }
        if (regInfo.password.length < 6) {
            return callback('密码最短需要 6 个字符');
        // 向服务器发送注册请求
        user.signUp(regInfo, {
            success: function(user) {
                // 注册成功,可以使用了.
            },
            error: function(user, error) {
                // 失败了
            }
        });
        return callback();
    };
    

    问题: 如何在服务器返回失败以后再返回callback('服务器注册失败')?

    谢谢大家!

    8 replies  •  2015-10-16 11:45:39 +08:00
    will0404
    will0404
    Oct 16, 2015
    1
    ```
    app.reg = function(regInfo, callback) {
    if (regInfo.account.length < 5) {
    return callback('用户名最短需要 5 个字符');
    }
    if (regInfo.password.length < 6) {
    return callback('密码最短需要 6 个字符');
    // 向服务器发送注册请求
    user.signUp(regInfo, {
    success: function(user) {
    // 注册成功,可以使用了.
    },
    error: function(user, error) {
    // 失败了
    return callback();
    }
    });

    };
    ```
    will0404
    will0404
    Oct 16, 2015
    2
    怎么不支持 markdown 你要的不是发 callback 放到回调里就好了吗
    chairuosen
    chairuosen
    Oct 16, 2015❤️1
    3
    把倒数第二行 return callback()那行删了
    user.signUp 的 success 和 error 里分别调 callback
    bru
    bru
    OP
    Oct 16, 2015
    4
    @chairuosen OK, 解决了,我之前也是在回调里面用了 return callback(); 直接调 callback 就可以了,谢谢~~
    Altman
    Altman
    Oct 16, 2015
    5
    用用 Promise 吧, 实在看不下去 callback 回调了
    bru
    bru
    OP
    Oct 16, 2015
    6
    @Altman 引入 Promise 对于原有的代码改动的工作主要有哪些?
    morethansean
    morethansean
    Oct 16, 2015
    7
    没有 callback 了。
    app.reg = function (regInfo) {
    if (regInfo.account.length < 5) {
    return Promise.reject('用户名最短需要 5 个字符');
    }
    if (regInfo.password.length < 6) {
    return Promise.reject('密码最短需要 6 个字符');

    return user.signUp(regInfo);
    };

    // 使用
    app.reg(regInfo)
    .then((ret) => {
    // 成功了
    })
    .catch((ex) => {
    // 失败了
    });

    // es7
    try {
    await app.reg(regInfo);
    } catch (ex) {
    // 失败了
    return;
    }
    // 成功,继续业务代码
    malcolmyu
    malcolmyu
    Oct 16, 2015
    8
    要么使用回调要么使用 promise
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   952 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 20:38 · PVG 04:38 · LAX 12:38 · JFK 15:38
    ♥ Do have faith in what you're doing.