2015-09-02 6 views
1

Я создал приложение javascript (aka UWA), чтобы играть с моим белинским wemo, а затем включить или отключить личность с Cortana. Следующая функция хорошо называется, но Cortana заканчивается проблемой. Если я удалю вызов HTTP-вызова, программа работает нормально. Кто может сказать мне, что случилось со следующей функцией, потому что нет больше деталей не подвергаются, к сожалению, (конечно, в реальной программе заменяется правом URL):Cortana столкнулся с проблемой

function setWemo(status) { 

    WinJS.xhr({ url: "<url>" }).then(function() { 
     var userMessage = new voiceCommands.VoiceCommandUserMessage(); 

     userMessage.spokenMessage = "Light is now turned " + status; 

     var statusContentTiles = []; 

     var statusTile = new voiceCommands.VoiceCommandContentTile(); 
     statusTile.contentTileType = voiceCommands.VoiceCommandContentTileType.titleOnly; 
     statusTile.title = "Light is set to: " + status; 

     statusContentTiles.push(statusTile); 

     var response = voiceCommands.VoiceCommandResponse.createResponse(userMessage, statusContentTiles); 

     return voiceServiceConnection.reportSuccessAsync(response); 

    }).done(); 

} 
+0

Мой первый вопрос будет, вы выдачи любого вида вызова [ReportProgressAsync] (https://msdn.microsoft.com/en-us/library/windows/apps/windows .applicationmodel.voicecommands.voicecommandserviceconnection.reportprogressasync.aspx)? Cortana не позволит фоновой задаче вешать бесконечно, вам нужно послать * что-то, чтобы показывать пользователя не реже одного раза в 5 секунд, и получение сообщения о ходе работы должно быть первым, что вы делаете. Если этот вызов xhr занимает некоторое время, я бы запустил что-то, что периодически посылает сообщения о выполнении параллельно во время его запуска. –

ответ

1

Убедитесь, что фоновая задача имеет доступ к WinJS Пространство имен. Для фоновых задач, поскольку не существует default.html, base.js не будет автоматически импортироваться, если вы явно не сделаете это.

Мне пришлось обновить winjs до версии 4.2 from here (или исходный репозиторий на git), а затем добавить это в мой проект для обновления из выпущенной версии, которая поставляется с VS 2015. У WinJS 4.0 есть ошибка, где он жалуется на геймпад управления, если вы пытаетесь импортировать его таким образом (см this MSDN forum post)

Затем я добавил строку как

importScripts("/Microsoft.WinJS.4.0/js/base.js"); 

к началу стартового кода вашего скрипта импорта WinJS. Без этого вы, вероятно, получаете ошибку, например, «WinJS undefined» появляется в вашей консоли отладки, но по какой-то причине всякий раз, когда я попадал в нее, я не получал отладочный перерыв в визуальной студии. Это привело к тому, что сеанс Cortana просто висел, ничего не делая, никогда не отправляя окончательный ответ.

Я также хотел бы добавить, что вы должны обрабатывать ошибки и обрабатывать прогресс, чтобы вы могли периодически отправлять отчеты о проделанной работе в Cortana, чтобы убедиться, что он не успевает вас (поэтому это дает вам ошибку, возможно, после около 5 секунд):

WinJS.xhr({ url: "http://urlhere/", responseType: "text" }).done(function completed(webResponse) { 
       ... handle response here 
    }, 
    function error(errorResponse) { 
     ... error handling 
    }, 
    function progress(requestProgress) { 
     ... <some kind of check to see if it's been longer than a second or two here since the last progress report> 
     var userProgressMessage = new voiceCommands.VoiceCommandUserMessage(); 

     userProgressMessage.DisplayMessage = "Still working on it!"; 
     userProgressMessage.SpokenMessage = "Still working on it"; 

     var response = voiceCommands.VoiceCommandResponse.createResponse(userProgressMessage); 
     return voiceServiceConnection.reportProgressAsync(response); 
    }); 
+1

Я загрузил новую версию, а также импортировал base.js вверху и теперь вызывается URL-адрес! Большое спасибо. – jbx028