Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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_Node.js_Angular Promise - Fatal编程技术网

javascript库中的异步承诺

javascript库中的异步承诺,javascript,node.js,angular-promise,Javascript,Node.js,Angular Promise,我有一个在线教程中的示例,我想知道如何将每个示例转换为异步调用 编辑-基本上我希望承诺以异步方式进行每个调用,或者它是如何工作的。我不熟悉承诺,一个承诺意味着一个异步调用,或者一个承诺可以有几个异步调用,然后在最后回调 如果我有以下三个函数调用,我如何将它们链接为异步的,现在它们都按顺序立即启动 编辑2-在Joel的支持下,根据所学内容改进了我的问题,我现在有小提琴了 也许这会给你你的期望(尽管我不确定你的期望): 你必须更具体地说明你什么时候想要完成任务。试着用文字来准确地解释你想要什么时候

我有一个在线教程中的示例,我想知道如何将每个示例转换为异步调用

编辑-基本上我希望承诺以异步方式进行每个调用,或者它是如何工作的。我不熟悉承诺,一个承诺意味着一个异步调用,或者一个承诺可以有几个异步调用,然后在最后回调

如果我有以下三个函数调用,我如何将它们链接为异步的,现在它们都按顺序立即启动

编辑2-在Joel的支持下,根据所学内容改进了我的问题,我现在有小提琴了


也许这会给你你的期望(尽管我不确定你的期望):


你必须更具体地说明你什么时候想要完成任务。试着用文字来准确地解释你想要什么时候运行各种事情。我希望您认识到,
setTimeout()
只在将来的某个时候安排回调—下一行代码运行时不会延迟。编辑我的问题…在Javascript中,您不能将函数调用转换为异步。给定的操作可以是同步的,也可以是异步的。除了
setTimeout()
之外的所有操作都是同步的。如果要使同步操作异步运行,可以将其隐藏在
setTimeout()
后面,但必须为每个操作添加setTimeout()。这真的是你想做的吗?如果是这样,您希望每个操作有多大的延迟?承诺不会生成异步代码,它们用于处理现有的异步调用(如IO)。您必须记住,javascript是单线程的,所以您的代码将一下子执行,即使使用承诺也是如此。如果希望在调用之间引入任意延迟,可以在每个承诺链中调用setTimeout。上面的代码可能不是正确的示例,我对承诺不熟悉,但我希望一些异步过程按顺序异步调用,比如调用服务(异步)、获取数据、解析结果,然后插入数据库(同样是异步的),然后用最后一个回调通知,承诺可以做到吗?如果在上述情况下,当将一个异步调用的结果反馈给下一个mmclose时,Joel,这看起来像是一个,我将基本上在每个调用中放置http服务调用,然后,将返回它在末尾的样子。这里的关键点在于方法waitAndSpeak:延迟只有在方法返回后才能解决。这样它就模拟了异步调用。好的,我可以对后续的每个thenables有不同的东西,例如waitAndSpeak1,waitAndSpeak2,waitAndSpeak3,我将很快发布一个fiddler供您审阅,然后接受您的回答。感谢Joel支持我的示例,有时,由于对某些事物不熟悉,很难描述您正在寻找的内容,以及在我的环境中工作方式的一些限制,请查看此提琴,我需要您的更多帮助,希望这会使它更清晰。你现在能看看这个吗
var q = require('q');
        var defer = q.defer();
        defer.promise
        .then(function(weapon){
            setTimeout(function(){console.log('wait')}, 2000);
            console.log("You can have my " + weapon);
            return "bow";
        })
        .then(function(weapon){
            console.log("and my " + weapon);
            return "axe";
        })
        .then(function(weapon){
            console.log("and my " + weapon);
        });

        defer.resolve("sword");
var q = require('q');

function waitAndSpeak(words) {
    var defer = q.defer();
    setTimeout(function(){
        defer.resolve(words)
    }, 2000);
    return defer.promise;
}

waitAndSpeak("sword").then(function(weapon) {
    console.log("You can have my " + weapon);
    return waitAndSpeak("bow");
}).then(function(weapon) {
    console.log("and my " + weapon);
    return waitAndSpeak("axe");
}).then(function(weapon) {
    console.log("and my " + weapon);
}).done();