小编kua*_*uan的帖子

将另一个承诺传递给承诺处理程序

我希望promise处理程序能够记录promise p1(而不是值"A"),因为直接console.log调用它p1.但是,它以某种方式记录"A".承诺如何在p1没有被调用的情况下自动解析为"A"?例如,console.log(p1)不按预期直接输出"A".幕后会发生什么事吗?

var p1 = new Promise(function(resolve, reject) {
  resolve("A");
});

var p2 = new Promise(function(resolve, reject) {
  resolve(p1);
});

p2.then(function(v) {
  console.log(v)
});
Run Code Online (Sandbox Code Playgroud)

编辑:我明白,打电话

p1.then((v) => return v))
Run Code Online (Sandbox Code Playgroud)

返回一个用值v实现的新promise.除非我在这里严重遗漏了某些东西,否则第二个promise构造函数中的"p1"引用应该直接传递给console.log,从而产生块

var p2 = new Promise(function(resolve, reject) {
  resolve(p1);
});

p2.then(function(v) {
 console.log(v)
});
Run Code Online (Sandbox Code Playgroud)

变得

console.log(p1).
Run Code Online (Sandbox Code Playgroud)

由于使用p1直接调用console.log,而不是p1.then(...)的结果,因此p1不应该像打印另一个程序一样解析为值"A"

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

console.log(promise)
Run Code Online (Sandbox Code Playgroud)

不会产生字符串"B".

编辑2:我有一种误解,认为传递给执行程序的resolve参数是未实现函数的包装器,这引起了大量的混淆.检查为什么Promise构造函数需要一个在完成时调用'resolve'的函数,但'then'却没有 - 它返回一个值而不是?更多细节.

javascript promise es6-promise

13
推荐指数
2
解决办法
2797
查看次数

put_assoc 需要验证

在我的 phoenix 项目中,我有一个通过连接表链接的帖子和标签架构

schema "posts" do
    field :title, :string
    field :body, :string

    many_to_many :tags, App.Tag, join_through: App.PostsTags , on_replace: :delete
    timestamps()   
end?
Run Code Online (Sandbox Code Playgroud)

我如何确保使用 put_assoc 存在标签?

def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:title, :body])
    |> put_assoc(:tags, parse_tags(params), required: true)
    |> validate_required([:title, :body, :tags])
end
Run Code Online (Sandbox Code Playgroud)

put_assoc 上的 required: true 和添加 :tags 来验证 required 都不像我想象的那样工作。

elixir ecto phoenix-framework

4
推荐指数
1
解决办法
1597
查看次数

C弦指针

为什么sscanf()不能将字符串写入char*s?我初始化为NULL,因为我不想要未初始化的变量.

#include <stdio.h>
#include <string.h>

int main()
{

    char* t = "I am a monkey";
    char *s = NULL;
    sscanf(t, "%s",s);
    printf("%s\n",s);


}
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
1
解决办法
101
查看次数

请一点C++帮忙(重复输出)

我有这个代码:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{

    int x;
    x=rand();
    int guess;
    do{
        cout<<"Enter your guess:";
        cin>>guess;
        if(guess==x)cout<<"You got it ! ;)\n";
        else {
            cout<<"Wrong(";
            if (guess<x) cout<<"too small)\n";
            else cout<<"too big)\n";
        }

    } while (guess != x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题:编译并运行此程序后,我输入"999999999999"并不断重复"太大".为什么会这样?

附加信息:当我将x的值设置为常数10,并且我输入11时,我注意到它只重复"太大"一次.有什么我不知道的吗?或者代码是否有缺陷?

非常感谢 :)

c++

2
推荐指数
1
解决办法
171
查看次数

简单:Python要求输入两次

这是我的代码:

def calculator(value1,value2):

    function=input("Function?")
    if function=="*":
     return value1*value2
    if function=="/":
     return value1/value2
    if function=="+":
     return value1+value2
    if function=="-":
     return value1-value2
a=float(input("value 1:"))
b=float(input("value 2:"))
calculator(a,b)
print(calculator(a,b))
Run Code Online (Sandbox Code Playgroud)

Python Shell上的输出

value 1:5
value 2:5
Function?/
Function?/
1.0
Run Code Online (Sandbox Code Playgroud)

所以我只是想知道它为什么要求两次输入功能,而不是一次.这可能是一个愚蠢的问题,但感谢您的回答.

python python-3.3

0
推荐指数
1
解决办法
2270
查看次数