Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用来自的函数。然后在其范围之外使用承诺方法_Javascript_Promise_Paint_Web Performance - Fatal编程技术网

Javascript 使用来自的函数。然后在其范围之外使用承诺方法

Javascript 使用来自的函数。然后在其范围之外使用承诺方法,javascript,promise,paint,web-performance,Javascript,Promise,Paint,Web Performance,我有一个名为paintTiming.js的文件,它使用查找Web性能参数,如First Paint和First Context Paint。文件内容如下所示: var FP, FCP, obj = []; function parent() { if ("PerformanceObserver" in window) { let observerPromise = new Promise((resolve, reject) => { //

我有一个名为paintTiming.js的文件,它使用查找Web性能参数,如First Paint和First Context Paint。文件内容如下所示:

var FP, FCP, obj = [];

function parent() {
    if ("PerformanceObserver" in window) {
        let observerPromise = new Promise((resolve, reject) => {
            // access the PerformanceObserver interface
            let observer = new PerformanceObserver((list) => {
                resolve(list);
            });

            observer.observe({
                entryTypes: ["paint"]
            });
        }).then((list) => {
            // Find out First Paint and First Contextual Paint
            FP = list.getEntries()[0].startTime;
            FCP = list.getEntries()[1].startTime;
            // Store in array
            obj[0] = FP;
            obj[1] = FCP;
            element = "The paint times are: <br> First Paint : " + FP + "ms, <br> First Contentful Paint : " + FCP + "ms";
            // show values on web page
            document.getElementsByTagName('p')[1].innerHTML = element;
        }).then(() => {
            // check if array is created, and is functioning
            console.log(obj[0]);
        }).then(() => {
            // create function
            function abc() {
                return {
                    a: obj[0],
                    b: obj[1]
                };
            };
        }).catch((error) => {
            console.warn(error);
        });
    }
};
var FP、FCP、obj=[];
函数父函数(){
如果(“窗口中的PerformanceObserver”){
让observerPromise=新承诺((解决、拒绝)=>{
//访问PerformanceObserver界面
让观察者=新性能观察者((列表)=>{
决议(清单);
});
观察者({
入口类型:[“油漆”]
});
})。然后((列表)=>{
//找出第一个绘制和第一个上下文绘制
FP=list.getEntries()[0].startTime;
FCP=list.getEntries()[1].startTime;
//数组存储
obj[0]=FP;
obj[1]=FCP;
element=“绘制时间为:
第一次绘制:“+FP+”ms,
第一次内容绘制:“+FCP+”ms”; //在网页上显示值 document.getElementsByTagName('p')[1].innerHTML=element; }).然后(()=>{ //检查阵列是否已创建并正在运行 console.log(obj[0]); }).然后(()=>{ //创建函数 函数abc(){ 返回{ 答:obj[0],, b:obj[1] }; }; }).catch((错误)=>{ 控制台。警告(错误); }); } };
如您所见,在解析承诺时应该创建一个函数abc()

我的问题:如何在承诺之外使用此函数

例如,考虑下面的示例(在HTML文件中使用):


//应返回包含FP和FCP值的对象
console.log(abc());

控制台显示未定义该函数。如果JS代码是内联的,它仍然不起作用。

如果在
中声明了该函数,则可能无法使用该函数。然后
。因为这个函数
abc
是传递给
的回调函数的私有函数。然后
&。然后将只使用ajax执行


或者,您可以在
承诺
之外定义此函数,并在
内部调用此函数。然后
回调。还需要使用
this

绑定
上下文。我得到了第一部分,但很抱歉,我没有理解您所说的第二部分。我如何准确定义承诺之外的函数?如何使用“this”绑定上下文?请原谅我的noobish问题,因为我对JS非常陌生。如果这太宽泛了,你能为我指出的任何方向都将不胜感激。没关系,在评论之前没有谷歌。现在,我知道了足够多的信息,可以继续了。谢谢你的帮助。
<script type="text/javascript" src="paintTiming.js"></script>
<script type="text/javascript">
    // should return object containing FP and FCP values    
    console.log(abc());
</script>