如何正确处理jQuery和Node.js的回调

How to properly deal with callbacks with jQuery and Node.js

本文关键字:js 回调 Node 正确处理 jQuery      更新时间:2023-09-26

我有以下情况:

调用本地node.js服务的jQuery $.get:

function getUser() {
    var name = $('#inputName').val();
    var url = "/users/" + name;
    $.get(url, function(err, res) {
        alert('Local service done');
    })
        .done(function() {
            alert('Remote service done');
        })
        .fail(function() {
            alert('Error')
        });
    }

调用远程服务的本地node.js服务:

router.get('/users/:name', function (req, res){
    //code
    var userId = endpoints.findUserId(req.params.name); 
    res.send(userId);
});

请求总是在远程服务调用结束前通过第一个警报,并且从不触发.done.fail函数。

我如何知道远程服务请求何时完成以及处理其响应的最佳方法?

你可以使用Jquery Promises:

$.when($.get(...))
.then(function(value) {
    console.log('success!')
}, function(error) {
    console.log('rejection');
});

有一个决议或拒绝诺言只兑现一次。被拒绝的愿望永远不会实现,被实现的愿望永远不会实现。

监听器执行一次

单个回调或错误回调将执行一次且仅执行一次。这是根据合同第一条规则得出的。

承诺记住它们的状态

用一个值解析的承诺记住了它的实现。如果将来将回调附加到此承诺,则将使用先前解析的值执行回调。错误返回也是如此。如果一个承诺被拒绝,并且在拒绝后附加了一个错误,那么它将使用被拒绝的值执行。无论承诺是已经解决了还是将来解决了,它的行为都是一样的。