On 11/17/2017 01:35 PM, Peter wrote:
> Add some console.log lines to your done and fail functions and before
> your "// Set html paragragh to insts". It might help you get a better
> idea of what is happening.
>
> with the .done call you are providing a callback that gets called when
> the spawn command finishes. At that point you now have the result and
> you can do what you want with it.
>
> So if your goal here is to run that command and then write it to html
> that needs to happen inside the done callback.
Uggggh, of course. It was working earlier because I was actually
updating a HTML from the "done" function, but then I tried to move that
result output to a drop down list. However, I was doing it from outside
of the done callback function.
Thank you very much for clarifying the behavior, and immediately
identifying my misunderstanding of how the done function worked.
Mark
>
> cockpit.spawn(['ls', '/tmp'], { superuser: true})
> .done(function(data) {
> // use data to update html
> }).fail(function(error){
> // write a failure message to html
> });
>
>
> On 11/17/2017 10:24 AM, Mark Reynolds wrote:
>>
>>
>> On 11/17/2017 12:50 PM, Peter wrote:
>>> cockpit.spawn returns a promise. It's asynchronous. get_insts will
>>> return before the callbacks that change the value of insts get run.
>>> You need to rethink what you trying to do here and base your code off
>>> of events or callbacks.
>> But I thought the done() method was supposed to wait? Okay... So please
>> tell me how do I get cockpit to run a os command, and get the
>> results(stdout) from that command?
>>
>> What is weird is that cockpit.spawn().done() is working in other JS
>> functions I have, except this one. Very odd... Still trying to see
>> what I changed that broke things because it was working fine a few hours
>> ago...
>>
>>>
>>>
>>> On 11/17/2017 09:40 AM, Mark Reynolds wrote:
>>>> Okay I'm really stumped because this was just working, but
>>>> cockpit.spawn
>>>> seems to be misbehaving
>>>>
>>>> Here is my js:
>>>>
>>>> function get_insts() {
>>>> var insts = ["None"];
>>>>
>>>> cockpit.spawn(['ls', '/tmp'], { superuser: true
>>>> }).done(function(data) {
>>>> insts= ["okay we actually got here"];
>>>> }).fail(function(error){
>>>> insts = ["FAIL"];
>>>> });
>>>> // Set html paragragh to insts
>>>> ...
>>>> }
>>>>
>>>> $(window.document).ready(function() {
>>>> get_insts();
>>>> $("body").show();
>>>> });
>>>>
>>>>
>>>>
>>>> "insts" is always set to "None". Debugging shows odd behavior.
>>>> When I
>>>> refresh the page cockpit.spawn just doesn't do anything.
>>>>
>>>> cockpit.js
>>>>
>>>> 1832 function(e ,n) <= n is the correct list of arguments
>>>>
>>>> But it does not execute function, then it skips to
>>>>
>>>> 1842 u.close = function(e) {
>>>>
>>>> It does not execute function, then it skips to
>>>>
>>>> 1847 returns u
>>>>
>>>> We don't fail, and we don't succeed, and my js function completes.
>>>> Then... my js function get_insts() gets called again automatically
>>>> (not
>>>> sure how its getting called twice from the page reload), and it does
>>>> appear to succeed the second time, data has expected values, but
>>>> somehow
>>>> after we get the data the debugger stops in a cockpit function listed
>>>> below. It loops a few times in the cockpit function, then my js
>>>> function, get_insts(), just aborts and disappears silently even though
>>>> things seemed to working correctly on the second pass.
>>>>
>>>> cockpit-ws-151-2.fc26
>>>>
>>>> cockpit.js:867
>>>>
>>>> function P(e) {
>>>> var n, t, r;
>>>> r = e.pending;
>>>> e.process_scheduled = false;
>>>> e.pending = undefined;
>>>> for (var o = 0, a = r.length; o < a; ++o) {
>>>> e.pur = true;
>>>> t = r[o][0];
>>>> n = r[o][e.status];
>>>> if (i(n)) {
>>>> t.resolve(n.apply(e.promise, e.values));
>>>> <--
>>>> debugger stops here, then its loops and moves on
>>>> } else if (e.status === 1) {
>>>> t.resolve.apply(t.resolve, e.values);
>>>> } else {
>>>> t.reject.apply(t.reject, e.values);
>>>> }
>>>> }
>>>> }
>>>>
>>>>
>>>> I don't know what to do next, this is very odd behavior. Especially
>>>> since it worked earlier today. I even rebooted my laptop :-( I tried
>>>> different and simple commands to send to cockpit.spawn, but it doesn't
>>>> change this behavior.
>>>>
>>>> Anything else I should be looking at?
>>>>
>>>> Thanks,
>>>> Mark
>>>> _______________________________________________
>>>> cockpit-devel mailing list -- cockpit-devel(a)lists.fedorahosted.org
>>>> To unsubscribe send an email to
>>>> cockpit-devel-leave(a)lists.fedorahosted.org
>>>>
>>>
>>>
>>>
>>
>