我从这样的API返回JSON:
Contacts: [{ GivenName: "Matt", FamilyName:"Berry" }]
Run Code Online (Sandbox Code Playgroud)
为了保持这与我的代码样式(camelCase - 小写首字母)一致,我想转换数组以产生以下内容:
contacts: [{ givenName: "Matt", familyName:"Berry" }]
Run Code Online (Sandbox Code Playgroud)
什么是最简单/最好的方法?创建一个新的Contact对象并迭代返回的数组中的所有联系人?
var jsonContacts = json["Contacts"],
contacts= [];
_.each(jsonContacts , function(item){
var contact = new Contact( item.GivenName, item.FamilyName );
contacts.push(contact);
});
Run Code Online (Sandbox Code Playgroud)
或者我可以映射原始或以某种方式转换它?
我想创造我认为被称为"瀑布"的东西.我想顺序处理一系列异步函数(jQuery promises).
这是一个人为的例子:
function doTask(taskNum){
var dfd = $.Deferred(),
time = Math.floor(Math.random()*3000);
setTimeout(function(){
console.log(taskNum);
dfd.resolve();
},time)
return dfd.promise();
}
var tasks = [1,2,3];
for (var i = 0; i < tasks.length; i++){
doTask(tasks[i]);
}
console.log("all done");
Run Code Online (Sandbox Code Playgroud)
我希望它按照它们执行的顺序完成任务(存在于数组中).因此,在这个例子中,我希望它执行任务1并等待它解决然后执行任务2等待它解决,执行任务3等并且日志"全部完成".
也许这是非常明显的,但我一直试图在整个下午解决这个问题.
我有一系列汽车.
car = {
make: "nissan",
model: "sunny",
colour: "red"
};
Run Code Online (Sandbox Code Playgroud)
我如何使用underscore.js按颜色对数组进行分组?
我已经尝试了几个组合,但我不确定如何指定我的迭代器条件:
var carsGroupedByColor = _.groupBy(cars, false, colour);
var carsGroupedByColor = _.groupBy(vars, false, function(cars){ return cars[colour]; };
Run Code Online (Sandbox Code Playgroud)
它们每次都返回数组中的所有内容.
我正在编写一个充斥着异步任务的解析器.我使用JQuery promises来控制和排序异步任务.这是构造函数的伪代码版本:
/**
* @constructor
*/
function Parser(json)
{
return $.when(
this.delete().then(this.insert(json)),
this.doSomething(),
this.doSomethingElse().then(this.update(json))
)
};
Run Code Online (Sandbox Code Playgroud)
这是一个示例函数的样子:
Parser.prototype.doSomething = function()
{
var dfd = $.Deferred();
exampleTask(dfd.reject, dfd.resolve);
return dfd.promise();
};
Run Code Online (Sandbox Code Playgroud)
来自JQuery文档:
在将多个Deferred对象传递给jQuery.when的情况下,该方法从新的"master"Deferred对象返回Promise,该对象跟踪已传递的所有Deferred的聚合状态
如何使用.progress()通知任何关心Parser整体进度的人?例如
var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});
Run Code Online (Sandbox Code Playgroud)
这是我想要做的事情的小提琴:http: //jsfiddle.net/ashanova/RjULA/2/
我想使用android AccountManager来同步我的webservice和应用程序(联系人和calander的标准同步)但是,AccountManager似乎只存储用户名和密码.我的Web服务需要三个凭据:用户名,密码和帐户.存储第三条信息的最佳做法是什么?
我有一个简单的事件链:
我曾经只是链接这些函数,每个函数在完成后调用下一个函数.然而,它不是很明显(getColumnsFromMeta正在填充视图中的结果).因此,为了清晰和重复使用代码,我想重构这些JQuery Promises.我以前用过承诺.但是我如何连锁超过两个?getColumnsFromMeta ().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;
这是一个例子getColumnsFromMeta:
var getColumnsFromMeta = function(id)
{
var sql,
dfd;
dfd = $.Deferred();
var onSuccess = function(tx, result)
{
var columns = [];
for (var i = 0; i < result.rows.length; i++)
{
columns.push(result.rows.item(i).Column);
}
dfd.resolve(columns);
};
var onError = function(tx, error)
{
dfd.reject(error);
};
sql = "SELECT Column FROM Meta WHERE id = ?";
database.query(sql, [id], onSuccess, onError);
return dfd.promise();
};
Run Code Online (Sandbox Code Playgroud) 在执行函数之前是否可以"等待"多个事件?我知道可能用jQuery deferredobejcts $.when等待两个承诺来解决,但我想知道它是否可能只是简单的旧事件?
假设点击事件和自定义事件触发警报,例如:
$.when("click", "customEvent").then(function(){ alert("yay"); });
Run Code Online (Sandbox Code Playgroud) 我有一个人对象,我基本上希望它能够发出自己的事件.但是,如果触发事件与原型具有相同的名称,则Chrome会打印出相当大的错误.在下面的代码示例中, person.murder触发murder将错误写入控制台的事件.(代码更有意义).
function Person() {
}
Person.prototype.murder = function() {
$(this).trigger("murder");
}
Run Code Online (Sandbox Code Playgroud)
我像这样调用触发器
var barry = new Person();
$(barry).on("murder", function(){
alert("I am so angry");
})
barry.murder();
Run Code Online (Sandbox Code Playgroud)
因此谋杀巴里导致错误,但是如果事件是这样的事情personDied,那么没有错误.我是否正确地触发了事件?我只是想毫无错误地杀人.
有时会返回错误的崩溃<error>,有时甚至
未捕获RangeError:超出最大调用堆栈大小
我想比较同一个表中的两列.我希望能够返回两列具有相同值的所有行.
我正在寻找类似的东西SELECT * FROM FOO WHERE C1 = C4.
因此,在下面的示例中,我将只返回第一行:
C1 || C2 || C3 || C4
--------------------------
1 || a || b || 1
2 || a || b || 4
3 || b || d || 2
4 || b || d || 2
Run Code Online (Sandbox Code Playgroud)
如果重要,我正在使用SQLite(更具体地说WebSQL).
基本上我是想写这个:
var async1 = $.when( a1() ).then(function(){ a2() });
var async2 = $.when( a3() ).then(function(){ a4() });
$.when(async1, async2).then(function(){
console.log("complete");
});
Run Code Online (Sandbox Code Playgroud)
但是当a1和a3执行时,该函数认为自己已经解决了.
我把相同的例子放在一个小提琴中:http://jsfiddle.net/Z7fzR/
javascript ×8
jquery ×7
android ×1
eventemitter ×1
iterator ×1
json ×1
progress ×1
promise ×1
sql ×1
waterfall ×1