我想使用promises,但我有一个回调API,格式如下:
window.onload; // set to callback
...
window.onload = function() {
};
Run Code Online (Sandbox Code Playgroud)
function request(onChangeHandler) {
...
}
request(function() {
// change happened
...
});
Run Code Online (Sandbox Code Playgroud)
function getStuff(dat, callback) {
...
}
getStuff("dataParam", function(err, data) {
...
})
Run Code Online (Sandbox Code Playgroud)
API;
API.one(function(err, data) {
API.two(function(err, data2) {
API.three(function(err, data3) {
...
});
});
});
Run Code Online (Sandbox Code Playgroud)
我编写的代码看起来像:
function getStuffDone(param) { | function getStuffDone(param) {
var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) {
// or = new $.Deferred() etc. | // using a promise constructor
myPromiseFn(param+1) | myPromiseFn(param+1)
.then(function(val) { /* or .done */ | .then(function(val) {
d.resolve(val); | resolve(val);
}).catch(function(err) { /* .fail */ | }).catch(function(err) {
d.reject(err); | reject(err);
}); | });
return d.promise; /* or promise() */ | });
} | }
Run Code Online (Sandbox Code Playgroud)
有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …
我已经开发了几年的JavaScript,我根本不理解有关承诺的大惊小怪.
似乎我所做的只是改变:
api(function(result){
api2(function(result2){
api3(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以使用像async这样的库,例如:
api().then(function(result){
api2().then(function(result2){
api3().then(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
哪个代码更多,可读性更低.我没有在这里获得任何东西,它也不会突然神奇地"平坦".更不用说必须将事物转换为承诺.
那么,这里的承诺有什么大惊小怪?
无论是ES6 Promise还是蓝鸟Promise,Q Promise等.
如何测试以查看给定对象是否为Promise?
AngularJS访问cookie的方式是什么?我已经看到了对cookie的服务和模块的引用,但没有示例.
是否存在或者没有AngularJS规范方法?
请将此问题视为严格教育.我仍然有兴趣听到新的答案和想法来实现这一点
我如何使用JavaScript实现双向数据绑定?
通过数据绑定到DOM,我的意思是,例如,拥有一个a带有属性的JavaScript对象b.然后有一个<input>DOM元素(例如),当DOM元素改变时,a改变,反之亦然(也就是说,我的意思是双向数据绑定).
以下是AngularJS的示意图:

所以基本上我有类似的JavaScript:
var a = {b:3};
Run Code Online (Sandbox Code Playgroud)
然后输入(或其他形式)元素,如:
<input type='text' value=''>
Run Code Online (Sandbox Code Playgroud)
我希望输入的值是a.b值(例如),当输入文本发生变化时,我也想a.b改变.当a.bJavaScript发生变化时,输入会发生变化.
在纯JavaScript中完成此操作的基本技术有哪些?
具体来说,我想要一个很好的答案来参考:
我是Mustache的忠实粉丝,所以我尝试用它来模板化.但是,当我尝试执行数据绑定本身时遇到了问题,因为Mustache将HTML作为字符串处理,因此在得到结果之后,我没有引用viewmodel中对象的位置.我能想到的唯一解决方法是使用属性修改HTML字符串(或创建DOM树)本身.我不介意使用不同的模板引擎.
基本上,我有一种强烈的感觉,我正在使手头的问题变得复杂,并且有一个简单的解决方案.
注意:请不要提供使用外部库的答案,尤其是那些包含数千行代码的库.我已经使用了(并且喜欢!)AngularJS和KnockoutJS.我真的不想要"使用框架x"形式的答案.最理想的是,我希望未来的读者不知道如何使用许多框架来掌握如何自己实现双向数据绑定.我不希望得到一个完整的答案,而是一个能够理解这个想法的答案.
我刚刚安装了IE9测试版并且在我创建的特定网站上(HTML5)IE9跳转到兼容模式,除非我手动告诉它不要.我试过删除网站的几个部分,但没有变化.包括删除所有CSS包括.在我的其他网站上它很好.
此外,不要手动设置它,因为IE9会记住用户设置,你无法将其恢复为自动(或者至少我没有找到,甚至没有通过隐私浏览和清空缓存)
无论如何.它跳转到兼容模式的网站:http://alliancesatwar.com/guide/
它呈现正确的地方:http://geuze.name/basement/(我不能发布超过1个超链接)
两者都使用相同doctype和全部.这些网站使用相同的基本模板(编码,元标记,doctype和相同的javascript)有很多共同点(除了外观)
如果有人对我有答案,那就太好了!在IE7模式下呈现的HTML5网站非常......蹩脚.
所以我们现在经历了好几次,我们发布了一款游戏(价格便宜),而且有人将其破解并放在镜子上.我们为所有应用设置了Google快讯,因此我们每天都会告诉他们正在进行黑客攻击.到目前为止,我们已经实施了Google建议的许可服务,每次使用唯一设备ID启动许可时,我们都会随机生成盐.当应用程序第一次启动时,我们运行一次检查服务.然后,我们为密钥生成一个512字符的哈希值,并在那里从SharedPreferences中比较存储的值.
现在,我知道检查一次可能是应用程序被阻止的地方.我们的字节码很可能是在没有启动检查的行的情况下查看和重新编译的.
从这里开始,我不想混淆我们的代码,因为我之前已经看过它.我想要更加坚实的东西,我也想学习如何正确地做到这一点.我对学习更感兴趣而不是赚钱,因为只有2%的人会寻找黑客版本.
到目前为止,就我自己而言,我已经提出了一个随机数发生器,它位于游戏的几个启动区域.启动时(例如,50次中的1次),将检查许可证.我知道这会使黑客更难攻击,因为破解者必须消除每个案例,编译,消除,编译.然而,这种方法仍然是可以破解的...所以你们有什么建议?同样,我对这个安全过程非常感兴趣,所以请教育,不要把它变成关于混淆的讨论或根据时间戳定期检查.
谢谢
javascript ×7
bluebird ×4
promise ×4
q ×3
callback ×2
es6-promise ×2
node.js ×2
ajax ×1
android ×1
angularjs ×1
css3 ×1
data-binding ×1
dom ×1
google-play ×1
html ×1
html5 ×1
jquery ×1
security ×1
setimmediate ×1