Климатехник, ну в любом случае на счет места расположения вызова - ошибка.
Далее, у меня такое предположение: вы пишете код, и он исполняется в таком же порядке.
Но судя по виду, функция wifi.sta.getap - не блокирующая. Это значит, что вызвав ее и передав ей ссылку на функцию callback код продолжает выполняться дальше.
И скорее всего у вас порядок получается такой:
1) объявили scanresults и положили в нее пусто
2) объявили функцию listap
3) вызвали сканирование сетей и ему приказали вызвать вашу listap по завершении сканирования
4) вывели пользователю весь html что у вас там далее расположен (включая то, что в scanresults - а в ней на этот момент пусто)
5) функция wifi.sta.getap отработала, вызвала вашу listap, которая положила в scanresults результаты, только они уже никому не нужны
Другими словами - некорректный порядок получается.
Вам нужно, чтобы у вас либо wifi.sta.getap работала в блокирующем режиме, либо выводить html уже из функции listap, чтобы это происходило только после получения точек, а не до.