开发者社区> 问答> 正文

Promise的用法

使用ES6的Promise,一般把一个异步的函数,用Promise包一层:


var test = function(data){

  return new Promise(function(resolve,reject){

      try{

        if(data.statue === "SUCCESS"){
         
         resolve(data);
        
        }else{
        
         reject(data);
         
        }

      }catch(e){

        reject(e)

      }
  
  })

}

但是我了解到,可以直接使用promise对象,可以不用它来包裹任何异步(或同步)过程:

var promise = new Promise(function(resolve,reject){

   // ...
   resolve(999);

})

promise.then(function(value){
   console.log(value); // 999
}).catch(function(error){
   console.error(error);
})

请问这种直接使用的方式,主要用在什么场景下?

展开
收起
爵霸 2016-06-17 12:01:53 2494 0
4 条回答
写回答
取消 提交回答
  • 题主这个包一层test function没看懂起到什么作用,直接使用promise丝毫没有问题

    2019-07-17 19:42:30
    赞同 展开评论 打赏
  • 看你是否对结果进行处理或者解析

    2019-07-17 19:42:29
    赞同 展开评论 打赏
  • 这个跟包装不保证没有关系的

    比如你之前发一个网络请求,就是用 ajax 发一个异步回调,如果你需要把这个操作包装成一个行为稍后再调用,可能就封装在一个函数里,如果不需要,就是直接调用

    这个跟上面两种情况一个道理

    2019-07-17 19:42:29
    赞同 展开评论 打赏
  • 你说的直接使用的场景是这样?

    var promise = new Promise(function(resolve,reject){
        //空实现
    })

    里面是空实现?那我告诉你没有这种使用场景,因为这种用法永远也不会被resolve或者reject。 所以无意义

    根据问题修正:

    通常也不会按你的那种写法,太啰嗦。 简写是这样的

    Promise
        .resolve(999)
        //链式可能

    这种用法是因为,后面可能有一系列能被(或者需要被)链式调用的操作,他们也需要一个Promise作为起始点

    2019-07-17 19:42:29
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载