Type/to search
0
Follow
0
Followers
Saat melakukan pengujian ulang, pada titik waktu manakah data yang diperoleh dengan memanggil API didasarkan?
Help
Created 2017-10-31 18:38:15  Updated 2017-10-31 18:48:57
 5
 1970

Dapatkah Anda menjelaskan secara singkat data yang diperoleh oleh GetTicker () dan GetRecords () berdasarkan pada titik waktu apa?
Misalnya, ketika Anda mengalami masalah yang sangat aneh, berikut adalah kode:
function main() {
 while (true) {
  var records = exchange.GetRecords();
  records.pop();
  Log(records.length);
  Sleep(60000);
 }
}
Rekaman output akhir selalu 0:
img

Tapi jika komentarnya dihapus dan pop () dihubungi:
function main() {
 while (true) {
  var records = exchange.GetRecords();
  //records.pop();
  Log(records.length);
  Sleep(60000);
 }
}
Saya tidak tahu apa yang terjadi.
img

Jika tidak ada lingkaran sementara, maka tidak ada masalah untuk menyimpan panggilan pop (():
function main() {
 var records = exchange.GetRecords();
 records.pop();
 Log(records.length);
 Sleep(60000);
}
img

Apakah Anda bisa menjawabnya?

Related Recommendations
Comment
All comments (5)

    GetRecords返回的数组, 其实是低层维护的同一个变量, 所以不能直接更改.

    9 years ago

    原来如此。建议在API文档里说明一下,防止误操作。

    9 years ago

    可能是js语言的特性导致的?我用slice()拷贝一次就没事了,不明白为什么……

    9 years ago

    用这个 深拷贝函数试下, 每次 获取到的 records 深拷贝一下, 然后就可以随意修改 复制后的 变量了。

    var cloneObj = function(obj) { // 深拷贝 对象函数 var str, newobj = obj.constructor === Array ? [] : {}; if (typeof obj !== 'object') { return; } else if (JSON) { str = JSON.stringify(obj); //系列化对象 newobj = JSON.parse(str); //还原 } else { for (var i in obj) { newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; };
    9 years ago

    slice() 这个是 彻底的复制 , 并不是引用。引用的操作 其实是 同一个 变量,修改了 下次获取 就会有影响。

    9 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)