我已经开始学习javascriptpromise。但是我就是不能理解promise的概念。最困扰我的是谁将Resolver和Reject函数传递给promise构造函数?
参见以下promise示例:
function getImage(url){
return new Promise(function(resolve, reject){
var img = new Image()
img.onload = function(){
resolve(url)
}
img.onerror = function(){
reject(url)
}
img.src = url
})
}
现在谁来传递resolve和rejects方法,因为我对javascript的理解告诉我,由于没有定义resolve和rejects,这个脚本将抛出未知变量错误?
getImage('doggy.jpg').then(function(successurl){
document.getElementById('doggyplayground').innerHTML = '<img src="' + successurl + '" />'
}).catch(function(errorurl){
console.log('Error loading ' + errorurl)
})
现在您看到了一个类似于上面的方法,传递这些方法(resolve和reject)的唯一方式是通过then和catch,正如上面对getImage的方法调用中所使用的那样。
我在理解promise时也遇到了同样的问题。你需要仔细观察promise创造的过程。当您编写var promise=newpromise(函数(解析、拒绝){…})
实际上,您正在调用Promise类的构造函数或创建Promise类的对象。现在,Promise构造函数需要一个函数回调。现在resolve和reject只是函数参数,而不是任何其他值。您可以编写任何内容来代替resolve或rejectHandler,如resolveHandler或rejectHandler。
这些解析或拒绝只不过是Promise执行时调用的函数回调。
现在,当Promise成功执行时,将调用解析;当Promise执行错误或失败时,将调用拒绝。
调用resolve的参数可以在内部访问,然后像这样访问
getImage().then(function(valueSentInResolve){ console.log('')})
调用reject的参数可以在
catch
中访问,如下所示
getImage().then(function(valueSentInResolve)
{//..do something}
).catch(function(errorSentInReject){
console.log('error',errorSentInReject )
})
我希望这会有帮助。如果我说错了什么,请告诉我。
Promise构造函数使用回调进行初始化,调用回调时,构造函数将reject
和resolve
作为参数传递。
下面是一个简单的演示:
class PromiseDemo {
constructor(cb) {
cb(this.resolve.bind(this), this.reject.bind(this));
}
resolve(d) {
console.log('resolve', d);
}
reject(d) {
console.log('reject', d);
}
}
new PromiseDemo((resolve, reject) => {
Math.random() > 0.5 ? resolve('1') : reject('1');
});
问题内容: 我有一个C函数声明如下: 如今,我的cython包装器代码使用了numpy数组中的缓冲区语法: 我想使用新的memoryview语法,我的问题是,使用memoryview时如何将指针传递给数据? 我试过了: 当我尝试编译模块时,出现了“无法将类型’long [:]’分配给’long *’”的错误。有没有什么方法可以在调用C函数之前将指针传递给numpy数组而不将其强制转换为numpy数
基本问题:程序何时在C中调用类的析构函数方法?有人告诉我,每当对象超出范围或受到时都会调用它 更具体的问题: 1)如果对象是通过指针创建的,并且该指针后来被删除或给定一个新的地址来指向,它所指向的对象是否调用其析构函数(假设没有其他东西指向它)? 2) 接下来是问题1,什么定义了对象何时超出范围(与对象何时离开给定的{block}无关)。换句话说,什么时候对链表中的对象调用析构函数? 3) 你想手
要将数组参数传递给函数,需指定不带方括号的数组名。例如,如果数组hourlyTemperatures声明如下: int hourlyTemperatures[24]; 则下列函数调用语句: modifyArray(hourlyTemperatutes,24); 将数组 hourlyTemperatures 及其长度传递给函数 modifyArray。将数组传递给函数时,通常也将其长度传递给函数,使
我很好奇在Spark中把一个RDD传递给一个函数到底做了什么。 假设我们如上定义一个函数。当我们调用函数并传递一个现有的RDD[String]对象作为输入参数时,这个my_function是否将这个RDD作为函数参数进行“复制”?换句话说,是按引用调用还是按值调用?
问题内容: 我想按值将列表传递给函数。默认情况下,列表和其他复杂对象通过引用传递给函数。这是一些目标: 可以写得短些吗?换句话说,我不想更改 ad 。 问题答案: 您可以使用,但是对于包含列表(或其他可变对象)的列表,您应该使用: 等价于或,并返回列表的浅表副本。 何时使用:
问题内容: 我正在使用TodoMVC应用程序来更好地使用AngularJS框架。在第14-16行的index.html中,您将看到以下内容: 注意 ng-submit 指令如何在不将 newTodo 模型作为参数传递的情况下调用 addTodo() 函数。 __ 不久之后,我在第19行的同一文件中遇到了以下代码: 您可以看到作者这次决定将 allChecked 模型传递给 markAll() 函数