返回介绍

Callback问题

发布于 2024-06-02 22:07:05 字数 3328 浏览 0 评论 0 收藏 0

js编程遇到的最大问题就是单线程异步问题,这里面涉及最多的肯定就是callback了,不能处理好callback问题,常常会出现大量的嵌套情况,就是著名的callback hell了。

ES6中会引入一个新的规范,叫做Promise。这可以规范我们使用异步的情况。

releasing Zalgo

What it means is a function that accepts a callback and sometimes returns it right away, and some other times it returns it after some delay, in the future.

就是我们的代码之中的callback,可能sync,也可能async触发,比如:

function register(options, callback) {
    var first_name = (options['first_name'] || '').trim();
    var last_name = (options['last_name'] || '').trim();
    var errors = [];

    if (!first_name) {
        errors.push(['first_name', 'Please enter a valid name']);
    }
    if (!last_name) {
        errors.push(['last_name', 'Please enter a valid name']);
    }
    if (errors.length) {
        return callback(null, errors);
    }

    var params = {
        'user': {
            'email': options['email'],
            'first_name': first_name,
            'last_name': last_name,
            'new_password': options['new_password'],
            'new_password_confirmation': options['new_password_confirmation'],
            'terms': '1'
        },
        'vrid': options['vrid'],
        'merge_history': options['merge_history'] || 'true'
    };

    requestWithSignature('post', '/api/v2/users', params, callback);
}

而最好的做法,是保证callback全是sync或者async, 那么将上面的修改为:

if (errors.length) {
  process.nextTick(function() {
    callback(null, errors);
  });
  return;
}

就可以避免releasing Zalgo

参考资料

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文