我有一个适用于大多数浏览器的应用。不幸的是,对于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);
});
}
我遇到的问题是数据库调用没有阻塞/同步,因此返回不起作用。通常我会在回调中添加一个回调,但是因为我想为所有浏览器提供一个代码库,所以我真的不能这样做。
有什么想法吗?
答案 0 :(得分:3)
异步函数要求整个callstack是异步的。
我会将你的代码重写为:
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(/**/)
也会返回一个承诺。您可以堆叠promises并将它们链接在一起以获得一种异步管道和过滤器。
如果你解开这些功能,你会得到类似的东西:
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;
}