我是coffeescript的新手,我有一个咖啡脚本代码
getProviderListDisplayValues:(domainId) ->
displayValues = []
$.ajax
contentType: 'application/json',
url: "/Services/ListProviders?domainid=#{domainId}",
success: (data) ->
for oneResponse in data
displayValues.push oneResponse.name
displayValues
编译为
CounselorHome.prototype.getProviderListValues = function(domainId) {
var values;
values = [];
$.ajax({
contentType: 'application/json',
url: "/Services/ListProviders?domainid=" + domainId,
success: function(data) {
var oneResponse, _i, _len, _results;
_results = [];
for (_i = 0, _len = data.length; _i < _len; _i++) {
oneResponse = data[_i];
_results.push(values.push(oneResponse.id));
}
return _results;
}
});
return values;
};
我只想将值推到values[]
&amp; displayValues[]
但为什么要创建_results[]
数组?它是否会妨碍浏览器的效率?是否有任何方法删除这种不道德的代码?可能是,通过编辑我的咖啡脚本。
编辑:工作条件
但是当我把警报代码作为
时 $.ajax
contentType: 'application/json',
url: "/Services/ListProviders?domainid=#{domainId}",
success: (data) ->
for oneResponse in data
displayValues.push oneResponse.name
alert displayValues
displayValues
此代码有效,我可以检索所需的数据。
答案 0 :(得分:2)
除了your code wouldn't work anyway之外,由于coffeescripts隐式函数返回值而生成_results
,而loops are only expressions也生成数组。文档声明:
有时,函数以循环结束,这些循环仅用于副作用。小心你不会意外返回 在这些情况下理解的结果,通过添加一个 有意义的回报值 - 如
true
- 或null
,位于底部 你的功能。
所以你期望的javascript可以通过编写
来创建…
success: (data) ->
for oneResponse in data
displayValues.push oneResponse.name
return
…
(“尾随return
和return undefined
现已逐步优化。” - 自版本1.0.1起;)
另请参阅Is there any way to not return something using CoffeeScript?
然而,你真正想要的是:
getProviderListDisplayValues:(domainId) ->
$.ajax
contentType: 'application/json',
url: "/Services/ListProviders?domainid=#{domainId}"
.then (data) ->
for oneResponse in data
oneResponse.name
…
getProviderListDisplayValues(…).then (displayValues) ->
…