Почему на эту функцию можно ссылаться без указания аргумента данных? - PullRequest
0 голосов
/ 03 февраля 2019

Я не понимаю, как эта функция, которая принимает аргумент arg, может быть вызвана без предоставления значения arg.Я предполагаю, что, поскольку метод loadStrings из библиотеки PS5 сделает асинхронный вызов, существует предположение о возвращаемых данных или сообщении, но я все же ожидал бы, что аргумент arg будет предоставлен в вызове функции, поскольку определение функции ожидает его.

Пытался найти объяснение этому в сети, но пока не может.

Это то, что используется и работает.

function setup() {
  loadStrings("lines.txt", doText);
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    text(data[i], 5, 20*i+20);
  }
}

Я подумал, что для предоставления аргумента для вызова doText мне придется обернуть его в анонимную функцию, чтобы предотвратить немедленное выполнение, добавив открытые парены после имени, а затем присвоив емуэто аргумент внутри оболочки.

function setup() {
  loadStrings("lines.txt", function () {doText(data);});
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    text(data[i], 5, 20*i+20);
  }
}

Так как данные магическим образом передаются в первом примере без фактического значения arg?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Никакой магии здесь.Как вы можете прочитать в docs или увидеть в коде p5.js loadString читает строки данного текстового файла и передает полученный массив в качестве первого аргумента функции обратного вызова..

0 голосов
/ 03 февраля 2019

loadStrings представляется функцией, которая ожидает, что второй параметр будет функцией, где аргумент является результатом обработки первого параметра.

Например,

function loadStrings(a, f) {
  new Promise(function(resolve) {
    resolve(a)
  })
  .then(f)
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    console.log(data[i], 5, 20*i+20);
  }
}

loadStrings("text.txt", doText)

, что можно считать таким же, как

function loadStrings(a, f) {
  new Promise(function(resolve) {
    resolve(a)
  })
  .then(function(data) {
    f(data)
  })  
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    console.log(data[i], 5, 20*i+20);
  }
}

loadStrings("text.txt", doText)

См. Также Есть ли различия между .then (functionReference) и .then (function (value) {return functionReference (value)})??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...