混合jquery承诺与Parse承诺

时间:2016-10-21 19:24:14

标签: javascript jquery ajax parse-platform

我正在使用 jquery 发送ajax请求来执行某些任务,并根据该jquery GET响应的结果,我正在对Parse Js库执行一些操作。

e.g。

我创建了一个这样的方法来发送请求。

sendRequest(URL, userId){
    return $.ajax({
        url: URL + userId,
        type: 'GET',
    }).fail((responseData) => {
        if (responseData.responseCode) {
            console.error(responseData.responseCode);
        }
    });
}

我正在使用它 -

sendRequest(URL, userId)
.then(
       (data) => {
                   // Example
                   // Get some value from data and save it in Parse object
                    var GameScore = Parse.Object.extend("GameScore");
                    var gameScore = new GameScore();

                       gameScore.set("score", 1337);
                       gameScore.set("playerName", "Sean Plott");
                       gameScore.set("cheatMode", false);

                       return gameScore.save(); 
                 }
).then(
        (changedGameObj) => {
           console.log(changedGameObj);
           // At this point receiving a parse promise which is not resolved yet.
        },
        (error) => {
       }
);

我知道我正在混合jquery promise和Parse promise但是不知道如何解析解析promises的解决方案因为jquery promises之前得到了解决。

我很想在js中答应,请指出我错在哪里。

2 个答案:

答案 0 :(得分:0)

从我可以看到你的承诺链是这个(删除功能等):

~/Library

您可以查看jQuery' s deferred的文档以获取更多详细信息。

要尝试两件事:

1)Convert jQuery deferred to a real promise。我这样做是因为我不在乎学习jQuery的延迟。你可能需要在这里挖掘......

Bergi建议:$.ajax().fail().then().then(success(), error());

OR

2)将你的Parse承诺链接在同一return Parse.Promise.resolve(jqueryPromise)

then()

答案 1 :(得分:0)

基于Michael在第一部分的建议,我创建了一个帮助方法,将Jquery延迟转换为Parse promise。我觉得这样做很优雅。

convertJqueryToParsePromise(jqueryPromise) {
    let promise = new Parse.Promise();

    jqueryPromise
        .then(
            (results) => {
                promise.resolve(results);
            },
            (error) => {
                promise.reject(error);
            }
        );
    return promise;
}

用法:

convertJqueryToParsePromise(sendRequest(URL, dataToSend))
.then(
       (success) => {
          // Do something here
       },
       (error) => {
       }
 );