簡體   English   中英

解析Promise'when'返回未定義(JavaScript)

[英]Parse Promise 'when' returns undefined (Javascript)

我正在嘗試使用以下代碼遵循Parse JavaScript SDK上的“何時”示例:Parse.Promise

GetFromDB2 = function(id) {
    var DB2 = Parse.Object.extend("DB2");
    var q = new Parse.Query(DB2);
    q.get(id, {
        success: function(res) {
            return Parse.Promise.as(10);
        },
        error: function(res, err) {
            console.log( err);
        }
    });
}

GetData = function() {
    var DB1 = Parse.Object.extend("DB1");
    var query = new Parse.Query(DB1);
    query.equalTo("param", "close");

    query.find().then(function(results) {
        var promises = [];
        _.each(results, function(res) {
            promises.push(GetFromDB2(res.get("user")));
        });

        Parse.Promise.when(promises).then(function() {
            console.log(arguments); // expect: [10, 10, ...]
        })
    }); 
};

數組參數的長度正確,但是不確定為什么其值未定義。

如所寫, GetFromDB2()返回undefined 要交付價值,它必須返回價值或承諾。

最簡單地說,要交付10 ,您可以編寫:

function GetFromDB2(id) {
    return 10;
}

但是要保持異步,並仍然交付10 ,則需要返回一個承諾,該承諾將解決為10

function GetFromDB2(id) {
    return Parse.Promise.as(10);
}

或您真正想要的.get(id)查詢:

function GetFromDB2(id) {
    var DB2 = Parse.Object.extend('DB2');
    var q = new Parse.Query(DB2);
    return q.get(id).then(function(res) {
        return 10;
    });
    //omit `.then(...)` entirely to deliver `res`
}

現在, GetData()可以編寫如下:

function GetData() {
    var DB1 = Parse.Object.extend('DB1');
    var query = new Parse.Query(DB1);
    query.equalTo('param', 'close');
    return query.find().then(function(results) {
        var promises = _.map(results, function(res) {
            return GetFromDB2(res.get('user'));
        });
        Parse.Promise.when(promises).then(function() {
            console.log(arguments); // expect: [10, 10, ...]
        }, function(err) {
            console.log(err);
            return err;
        });
    }); 
};

筆記:

  • promises = _.map(...)_.each(...)加上`promises.push(...)更優雅。
  • 將錯誤處理程序移至GetData()可以處理更大范圍的可能錯誤,例如query.find()引起的錯誤。
  • 通過返回一個promise,GetData()的調用方也將被告知最終的異步結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM