Javascript 使用来自的函数。然后在其范围之外使用承诺方法
我有一个名为paintTiming.js的文件,它使用查找Web性能参数,如First Paint和First Context Paint。文件内容如下所示: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) => { //
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>