bwin2299必赢亚洲关于Promise的一段代码的疑问

2016/12 01 09:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于bwin2299必赢亚洲的点点滴滴

import { Promise } from es6-promise;

function loadScripturl {
let script = Array.fromdocument.scripts.finds => s.src === url;
  if script {
    return Promise.resolveurl;//①
  }
  return new Promisefunctionresolve, reject { //②
        script = document.createElementscript;
        script.addEventListenerload,  function { resolveurl; }, false;
        script.addEventListenererror, function { rejecturl; }, false;

        script.src = url;
        document.body.appendChildscript;
    };

1、②处是定义了一个Promise东西,和①处的区别是什么?
2、①处Promise.resolveurl 为什么把这个url放出来?

这段代码的意思不该该是该url加载完之后,实行。 它怎样知道url什么时分加载完?

  1. ①这是Promise的简单写法,和②真实是一样的,①这里可以同等于

    return new Promisefunctionresolve{
        resolveurl;
    };
  2. 这个loadScript这个函数在后面还挂了个then办法的对吧?url在这里可以理解为向后面的then转达参数。

至于你的第三个题目,我来稍微梳理下这个函数的流程吧。
变量script表现以后页面能否曾经加载了指定的脚本。假如曾经加载了,那么就会运转:

return Promise.resolveurl;

//这个在下面曾经提过了,它同等于
return new Promisefunctionresolve{
    resolveurl;
}

理想上,前往的这个Promise便是个空的,它立刻实行了resolve函数把值转达了下去。

假如指定脚本并没有加载,那么就会实行你的第②部分。
这部分将会加载指定的脚本,然后等待脚本加载完成,或许是加载蜕化。
然后就到了你的疑问,怎样判别啥时分加载完成,啥时分蜕化呢?

答案是你的这两句话:

script.addEventListenerload,  function { resolveurl; }, false;
script.addEventListenererror, function { rejecturl; }, false;

这里给脚本绑定了loaderror事变,两个事变中的回调函数辨别表现了这个脚本在将来的两种可以性。
用个不太得当的比喻,resolvereject两个函数就仿佛promise的开关,实行这两个函数就表现以后promise的办法实行完了,立刻就会实行then绑定的下一个办法。

(看完/读完)这篇文章有何感想! 来看看bwin2299必赢亚洲是怎么评论的吧!

--转载请注明: bwin2299必赢亚洲_www.bwin2299.com_bwin2299必赢亚洲世界顶级公司 » bwin2299必赢亚洲关于Promise的一段代码的疑问

发表评论

(必填)