Javascript 承诺在$http承诺结束之前返回

Javascript 承诺在$http承诺结束之前返回,javascript,promise,Javascript,Promise,我需要一个函数调用第二个函数,其中第二个函数包括一些设置代码、一个对REST服务器的http回调,然后在返回第一个函数之前,再调用一些清理代码。其思想是让第一个函数在第二个函数完成后显示结果消息 下面的示例在第二个函数完成回调之前返回,因此我不会得到http成功或错误的结果 var saveData = function(_this){ return new Promise(function(resolve,reject){ resolve( _this.Save

我需要一个函数调用第二个函数,其中第二个函数包括一些设置代码、一个对REST服务器的http回调,然后在返回第一个函数之前,再调用一些清理代码。其思想是让第一个函数在第二个函数完成后显示结果消息

下面的示例在第二个函数完成回调之前返回,因此我不会得到http成功或错误的结果

var saveData = function(_this){
        return new Promise(function(resolve,reject){
        resolve( _this.Save('SavExit') );
    });
};


saveData(this).then(function(httpResponse){
    // display response after http callback finishes
    console.log(httpResponse);
});


this.Save = function (lcAction) {
    // validate data

    $http.post('serverCallback.aspx',oSelectedVendor).
        success(function (data, status, headers, config) {

        // process data before returning;

        return true;
    }).
    error(function(data,status,headers,config){
        console.log(data);
        return false;
    });
};

您需要从保存方法返回承诺:

this.Save = function (lcAction) {
    // validate data

    return $http.post('serverCallback.aspx',oSelectedVendor).
        success(function (data, status, headers, config) {

        // process data before returning;

        return true;
    }).
    error(function(data,status,headers,config){
        console.log(data);
        return false;
    });
};
注意
return
我添加在
$http
前面

此外,由于您从Save返回承诺,因此saveData中不需要另一个承诺:

var saveData = function(_this) {
    return _this.Save('SavExit')
};

放下
saveData
函数,只需从
Save
方法返回承诺即可。您甚至已经返回了一个承诺。不要使用
.success
.error
,它们已被弃用。仅使用
.then()
。非常感谢,我找到的所有示例都非常复杂,我认为这很愚蠢,但无法理解。你让我开心!