Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 - Fatal编程技术网

Javascript 为什么要承诺。一切都不一定要承诺?

Javascript 为什么要承诺。一切都不一定要承诺?,javascript,Javascript,具有这些嵌套函数: Promise.all( mapDomains( x => x.close() ) ) 我考虑过要创作它们: compose(Promise.all, mapDomains)( x => x.close() ) 然而,上述代码在没有约束Promise.all的情况下失败。这是修复方法: let f1 = Promise.all.bind(Promise) compose(f1, mapDomains)( x => x.close() ) 虽然我理解这一

具有这些嵌套函数:

Promise.all( mapDomains( x => x.close() ) )
我考虑过要创作它们:

compose(Promise.all, mapDomains)( x => x.close() )
然而,上述代码在没有约束Promise.all的情况下失败。这是修复方法:

let f1 = Promise.all.bind(Promise)
compose(f1, mapDomains)( x => x.close() )

虽然我理解这一切都是关于
这个
关键字在Javascript中如何工作的,但我想知道:
为什么所有的
都没有绑定到它自己?这有什么价值吗?

我猜这就是问题所在:

var承诺={
全部:函数(){
console.log(this.text)
},
文本:“一些文本”
};
答应我//一些文本
函数组合(f){
f();//这里的“this”不是您所期望的,除非您已经绑定了它
}
撰写(承诺,全部)//未定义

撰写(承诺、所有、约束(承诺))//一些文本
我猜是这样的问题:

var承诺={
全部:函数(){
console.log(this.text)
},
文本:“一些文本”
};
答应我//一些文本
函数组合(f){
f();//这里的“this”不是您所期望的,除非您已经绑定了它
}
撰写(承诺,全部)//未定义

撰写(承诺、所有、约束(承诺))//一些文本
您可能希望将其用于另一个Promise实现

//只是一个演示
//这应该是另一个有意义的图书馆
类MyPromise扩展了Promise{
然后(完成,拒绝){
const wrappedoncompleted=函数(arg){
log(`I是用${arg}`实现的`)
完成时返回(arg)
}
返回super.then.call(this,wrappedonCompleted,onRejected)
}
}
var all=Promise.all
const myPromise=all
.call(MyPromise,[MyPromise.resolve(1),MyPromise.resolve(2)])
.然后(([x,y])=>console.log(x,y))

log(myPromise instanceof myPromise)
您可能希望将其用于另一个Promise实现

//只是一个演示
//这应该是另一个有意义的图书馆
类MyPromise扩展了Promise{
然后(完成,拒绝){
const wrappedoncompleted=函数(arg){
log(`I是用${arg}`实现的`)
完成时返回(arg)
}
返回super.then.call(this,wrappedonCompleted,onRejected)
}
}
var all=Promise.all
const myPromise=all
.call(MyPromise,[MyPromise.resolve(1),MyPromise.resolve(2)])
.然后(([x,y])=>console.log(x,y))
console.log(myPromise的myPromise实例)