2016-04-29 1 views
1

Je dois faire une fonction pour charger un fichier texte, dans une application Windows Universal JavaScript, qui renvoie une chaîne pas un "promesse".UWP JavaScript charger le fichier texte local, sans "appels asynchrones"

Ce code renverra une "promesse" pas une chaîne, donc est-il un moyen d'incorporer cela dans une fonction (qui attendra puis retourner une chaîne), ou une autre manière complète de charger un fichier.

function getFileContentAsync(fileName) { 
    var fileName = new Windows.Foundation.Uri("ms-appx:///" + fileName); 
     return Windows.Storage.StorageFile.getFileFromApplicationUriAsync(fileName).then(function (file) { 
    return Windows.Storage.FileIO.readTextAsync(file); 
    }); 
}); 

//usage 
getFileContentAsync(filename).then(function(fileContent){ 
    ... 
}); 

J'ai besoin d'une fonction qui recevra un nom de fichier et retournera une chaîne;

+0

double possible de [Comment renvoyer la réponse d'un appel asynchrone?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an appel asynchrone) –

Répondre

1

Comme cela a été mentionné dans un commentaire, lorsque vous traitez des appels asynchrones et en particulier avec des promesses, vous devez changer votre architecture: en particulier votre fonction interne doit renvoyer une promesse au lieu de valeur.

function getFileContentAsync(fileName) { 
    var fileName = new Windows.Foundation.Uri("ms-appx:///" + fileName); 
    return Windows.Storage.StorageFile.getFileFromApplicationUriAsync(fileName).then(function (file) { 
     return Windows.Storage.FileIO.readTextAsync(file); 
    }); 
}); 

//usage 
getFileContentAsync(filename).then(function(fileContent){ 
    ... 
}); 

En pratique, il vous incombe également de gérer les états d'erreur possibles, en particulier pour les systèmes de fichiers.

getFileContentAsync(filename).then(function processContent(fileContent){ 
    ... 
}, function processError(error){ 
    ... 
}); 
+0

Pourquoi devrait-il retourner une "promesse" au lieu d'une "valeur", vous n'avez donné aucune explication. Ce que je veux vraiment, c'est une chaîne de caractères, alors pourquoi devrais-je lui renvoyer une «promesse» si cela cause du code répétitif à chaque fois qu'elle est appelée. –

+0

1. Vous êtes déjà confronté à des promesses dès que vous utilisez les fonctions *** asynchrones. Les fonctions que vous appelez (par exemple, readTextAsync) renvoient des promesses et non des valeurs. 2. La valeur n'existe tout simplement pas au moment où vous appelez la fonction, c'est pourquoi vous devez utiliser des promesses avec des fonctions de rappel. – Konstantin

+0

Existe-t-il un moyen de charger un fichier qui n'utilise pas de promesses? –