node[14]-promise

Promise

promise是nodejs的对象,用于处理异步的同步操作。
new Promsie新建一个promise对象,两个参数(resolve,reject)是两个函数。
当调用resolve意味着操作成功。
当调用reject意味着操作失败。

resolve和reject都只会执行一次。

then 函数会在promise执行完毕之后调用。
第一个参数回调函数会在resolve成功后调用,第二个回调函数会在reject触发后调用。

resolve操作成功

1
2
3
4
5
6
7
8
9
10
11
12
var somePromise = new Promise((resolve,reject)=>{
  setTimeout(()=>{
      resolve('hey it works');
  },2500);

});

somePromise.then((message)=>{
  console.log('Success',message);
},(errorMessage)=>{
  console.log('Error:',errorMessage);
});

打印出hey it works

reject操作失败

1
2
3
4
5
6
7
8
9
10
11
12
var somePromise = new Promise((resolve,reject)=>{
  setTimeout(()=>{
      reject('ai it is error');
  },2500);

});

somePromise.then((message)=>{
  console.log('Success',message);
},(errorMessage)=>{
  console.log('Error:',errorMessage);
});

打印出Error: ai it is error

复杂promise

带参数并且多重then函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var asyncAdd = (a,b)=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
          if(typeof a==='number' && typeof b==='number'){
            resolve(a+b);
          }else{
            reject('Argument must be number');
          }
        });
    });
};

asyncAdd(5,7).then((res)=>{
  console.log('Result',res);
  return asyncAdd(res,'33');
},(errorMessage)=>{
  console.log(errorMessage);
}).then((res)=>{
  console.log('should be 45',res);
},(errorMessage)=>{
  console.log(errorMessage);
});

执行结果:

1
2
3
Result 12
Argument must be number
Error: ai it is error

多重then特性

在asyncAdd(5,‘7’)函数reject失败后,第二个then仍然调用的是第一个回调函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var asyncAdd = (a,b)=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
          if(typeof a==='number' && typeof b==='number'){
            resolve(a+b);
          }else{
            reject('Argument must be number');
          }
        });
    });
};

asyncAdd(5,'7').then((res)=>{
  console.log('Result',res);
  return asyncAdd(res,'33');
},(errorMessage)=>{
  console.log(errorMessage);
}).then((res)=>{
  console.log('should be 45',res);
},(errorMessage)=>{
  console.log(errorMessage);
});

结果为:

1
2
3
Argument must be number
should be 45 undefined
Error: ai it is error

郑建勋(jonson)区块链工程师 & Web工程师

灾难总是接踵而至,这正是世间的常理。你以为只要哭诉一下,就会有谁来救你吗?如果失败了,就只能说明我不过是如此程度的男人。

发布了59 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weishixianglian/article/details/84112846