等待JS异步功能完成,然后再运行一些同步代码

AJSwift

我有一个异步函数getDataItem该函数返回一个promise,并将数据传递到另一个函数preparePhysicianSchemaData,该函数physicianDetailsObj根据传递的数据以及为初始传递的每一行数据在其中调用另一个异步函数后获取的数据构建一个全局对象

getDataItem(listID, itemID).then(preparePhysicianSchemaData)

仅在physicianDetailsObj完全填充了全局对象变量之后,才需要调用另一个函数buildSEOSchemaBlock(),其功能是解析physicianDetailsObj对象并构建所需的最终对象。

我宁愿不使用setTimeOut尝试计时:

      setTimeout(function(){ return getListItem(listID, itemID).then(preparePhysicianSchemaData) }, 10);
      setTimeout(function(){ return buildPhysicianSchemaBlock() }, 3000); 

我如何像这样链接最后一个函数:getDataItem(listID, itemID).then(preparePhysicianSchemaData).then(buildPhysicianSchemaBlock)确保最后一个函数仅在physicianDetailsObj完全填充全局对象变量之后运行

    var physicianDetailsObj = {};
    function getListItem() {}  //returns promise
    function preparePhysicianSchemaData(item) {
        var tempPhysicianDetailsObj = {};   
        var currentPhysicianItemId = item.get_id();
    
        tempPhysicianDetailsObj = {
            "name" : item.get_item("Title"),
            "url" : item.get_item("SEOCanonicalHref").match('href="([^"]+)')[1]
        };
     
         var currentItemPhysicianTag= item.get_item("PhysicianItemTag").get_label();  
    
         getPhysicianLocationDetailsFromServiceLocations(currentItemPhysicianTag).then(function(slitems) {
            console.log(slitems);
            var slitemEnum = slitems.getEnumerator();
    
            //first empty the object
            Object.keys(physicianDetailsObj).forEach(k => delete physicianDetailsObj[k]);
    
            while (slitemEnum.moveNext()) {
                var slitem = slitemEnum.get_current();
                physicianDetailsObj[currentPhysicianItemId + '-' + slitem.get_id()] = {
                    "name":  tempPhysicianDetailsObj["name"],
                    "image": tempPhysicianDetailsObj["image"],
                    "url": tempPhysicianDetailsObj["url"],
                    "streetAddress": slitem.get_item("LocationAddress"),
                    "addressLocality": slitem.get_item("LocationLU_x003A_LocationCity").get_lookupValue()
                }
            }
         }); 
    
    }

function buildSEOSchemaBlock(){ }  //process physicianDetailsObj

getPhysicianLocationDetailsFromServiceLocations 是一个异步函数,在内部被调用 preparePhysicianSchemaData

大卫

如果preparePhysicianSchemaData是同步的,则无需等待它,只需在它之后执行操作即可。像这样:

getListItem(listID, itemID).then(function() {
  preparePhysicianSchemaData();
  buildPhysicianSchemaBlock();
});

或者,如果您需要Promise的结果,例如:

getListItem(listID, itemID).then(function(result) {
  preparePhysicianSchemaData(result);
  buildPhysicianSchemaBlock();
});

如果它是异步的,则可以链接Promises,例如:

getListItem(listID, itemID)
  .then(function(result) { return preparePhysicianSchemaData(result); })
  .then(function(newResult) { return buildPhysicianSchemaBlock(newResult); });

基本上,每次调用都会.then()将先前Promise的结果传递给新的异步函数,并返回该函数的Promise。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript / jQuery-等待功能完成,然后再运行其余功能

来自分类Dev

等待循环中的每个动画完成,然后再运行下一个动画

来自分类Dev

等待循环中的每个动画完成,然后再运行下一个动画

来自分类Dev

等待几秒钟,然后再运行下一步量角器

来自分类Dev

等待500毫秒,然后再运行react hook

来自分类Dev

等待(网络)服务器启动,然后再运行Inno Setup [运行]部分中的另一个程序

来自分类Dev

睡眠x秒,然后再运行下一个操作

来自分类常见问题

Java等待所有线程完成,然后再打印一些信息

来自分类Dev

有什么方法可以将UNIX代码放在文本文件中,然后再运行?

来自分类Dev

如何使bash / shell变得一部分脚本同时运行,然后再运行?

来自分类Dev

等待两个异步完成函数完成,然后再执行下一行代码

来自分类Dev

等待两个异步完成函数完成,然后再执行下一行代码

来自分类Dev

如何使一些同步代码先于其他异步代码运行?

来自分类Dev

如何编写bash / shell脚本以使一部分脚本同时运行然后再运行?

来自分类Dev

等待任务完成,然后再次运行

来自分类Dev

等待一些功能在Android中完成

来自分类Dev

方法正在等待异步完成,然后再移至下一行

来自分类Dev

等待Ajax功能完成,然后再开始新的功能

来自分类Dev

等待Ajax功能完成,然后再开始新的功能

来自分类Dev

等待循环完成,然后再执行下一个功能

来自分类Dev

等待Swift动画完成,然后再执行代码

来自分类Dev

Javascript ES6-等待模块完成执行,然后再将功能或变量导入另一个.js文件中

来自分类Dev

为什么功能立即完成一次循环,然后再次运行?

来自分类Dev

等待功能中的所有淡入完成,然后再启动下一个功能

来自分类Dev

等待功能中的所有淡入完成,然后再启动下一个功能

来自分类Dev

如何在python脚本中运行一些代码,然后暂停脚本并等待来自另一个脚本的函数调用

来自分类Dev

不能再运行rspec

来自分类Dev

等待异步功能完成

来自分类Dev

等待异步过程完成,然后再重定向到Koajs

Related 相关文章

  1. 1

    Javascript / jQuery-等待功能完成,然后再运行其余功能

  2. 2

    等待循环中的每个动画完成,然后再运行下一个动画

  3. 3

    等待循环中的每个动画完成,然后再运行下一个动画

  4. 4

    等待几秒钟,然后再运行下一步量角器

  5. 5

    等待500毫秒,然后再运行react hook

  6. 6

    等待(网络)服务器启动,然后再运行Inno Setup [运行]部分中的另一个程序

  7. 7

    睡眠x秒,然后再运行下一个操作

  8. 8

    Java等待所有线程完成,然后再打印一些信息

  9. 9

    有什么方法可以将UNIX代码放在文本文件中,然后再运行?

  10. 10

    如何使bash / shell变得一部分脚本同时运行,然后再运行?

  11. 11

    等待两个异步完成函数完成,然后再执行下一行代码

  12. 12

    等待两个异步完成函数完成,然后再执行下一行代码

  13. 13

    如何使一些同步代码先于其他异步代码运行?

  14. 14

    如何编写bash / shell脚本以使一部分脚本同时运行然后再运行?

  15. 15

    等待任务完成,然后再次运行

  16. 16

    等待一些功能在Android中完成

  17. 17

    方法正在等待异步完成,然后再移至下一行

  18. 18

    等待Ajax功能完成,然后再开始新的功能

  19. 19

    等待Ajax功能完成,然后再开始新的功能

  20. 20

    等待循环完成,然后再执行下一个功能

  21. 21

    等待Swift动画完成,然后再执行代码

  22. 22

    Javascript ES6-等待模块完成执行,然后再将功能或变量导入另一个.js文件中

  23. 23

    为什么功能立即完成一次循环,然后再次运行?

  24. 24

    等待功能中的所有淡入完成,然后再启动下一个功能

  25. 25

    等待功能中的所有淡入完成,然后再启动下一个功能

  26. 26

    如何在python脚本中运行一些代码,然后暂停脚本并等待来自另一个脚本的函数调用

  27. 27

    不能再运行rspec

  28. 28

    等待异步功能完成

  29. 29

    等待异步过程完成,然后再重定向到Koajs

热门标签

归档