0

我有一个适用于大多数浏览器的应用程序。不幸的是,对于 Windows Phone 8 上的 Internet Explorer 10,我可以更改的内容非常有限。有一些函数在 WP IE10 中不起作用——但我想通过劫持这些函数来解决这些问题,而不是重写任何代码。

var valueNeeded =  myFunction("settings")

// This function cannot have another param without me having to change lots of code
myFunction = function (field) {
    db.values('tblStorage', null, 10).done(function (results) {
        return (results[i].value);
    });
}

我遇到的问题是数据库调用不是阻塞/同步的,因此返回不起作用。通常我会在参数中添加一个回调,但是因为我想要一个适用于所有浏览器的代码库,所以我真的不能这样做。

有什么想法吗?

4

1 回答 1

3

异步函数要求整个调用栈是异步的。

我会将您的代码重写为:

myFunction("settings").done(function (value) {
    console.log("value", value);
});

myFunction = function (field) {
    // v-- added return here                 v-- then here, so we return another promise (so we can call .done())
    return db.values('tblStorage', null, 10).then(function (results) {
        return (results[i].value);
    });
}

那么myFunction返回什么?它返回一个承诺。承诺,当它被解决时,它将具有您要求的价值。

更准确地说:myFunction返回 的值db.values(/**/).then(),这是一个承诺。db.values(/**/)还返回一个承诺。您可以堆叠 Promise 并将它们链接在一起以获得一种异步管道和过滤器。

如果你解开这些函数,你会得到这样的东西:

myFunction = function (field) {
    var value_promise = db.values('tblStorage', null, 10);
    var filtered_value_promise = value_promise.then(function (results) {
        return (results[i].value);
    });
    return filtered_value_promise;
}
于 2013-04-25T19:21:58.070 回答