I'm whiting firefox extension. I got function that's reading contents of file:
var HelloWorld = {...
getData: function () {
var env = Components.classes["@mozilla.org/processenvironment;1"].getService(Components.interfaces.nsIEnvironment);
var path = env.get("TEMP");
path = path + "\\lastcall.txt"
alert(path);
Components.utils.import("resource://gre/modules/osfile.jsm");
let decoder = new TextDecoder();
let promise = OS.File.read(path);
var line = null;
promise = promise.then(
function onSuccess(array) {
line = decoder.decode(array)
alert(line);
return line;
}
);
alert("ducky:"+line+"duck");
},
...};
I except that line
will be the same because is declared outside function. From inner alert I got proper value but from outer one I get duckynullduck
. how to fix it
Instead of returning
line
you return promise for line, then the caller can do:Don't use the outer alert.
That's how asynchronous code works, you can only access the data in the callbacks that are executed later. However, with promise chaining, it doesn't need to go all in the same callback or in nested callbacks.